// errorcheck -0 -d=ssa/opt/debug=3 | |
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") | |
} | |
// Can't do types that aren't "direct" interfaces (yet). | |
r = indirectiface{3, 4, 5} | |
if r.Value() != 12 { | |
panic("not 12") | |
} | |
} |