| // errorcheck -0 -d=ssa/opt/debug=1 | |
| package main | |
| // Trivial interface call devirtualization test. | |
| type real struct { | |
| value int | |
| } | |
| func (r *real) Value() int { return r.value } | |
| type Valuer interface { | |
| Value() int | |
| } | |
| type indirectiface struct { | |
| a, b, c int | |
| } | |
| func (i indirectiface) Value() int { | |
| return i.a + i.b + i.c | |
| } | |
| func main() { | |
| var r Valuer | |
| rptr := &real{value: 3} | |
| r = rptr | |
| if r.Value() != 3 { // ERROR "de-virtualizing call$" | |
| panic("not 3") | |
| } | |
| r = indirectiface{3, 4, 5} | |
| if r.Value() != 12 { // ERROR "de-virtualizing call$" | |
| panic("not 12") | |
| } | |
| } |