modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/devirt.go (about) 1 // errorcheck -0 -d=ssa/opt/debug=3 2 3 package main 4 5 // Trivial interface call devirtualization test. 6 7 type real struct { 8 value int 9 } 10 11 func (r *real) Value() int { return r.value } 12 13 type Valuer interface { 14 Value() int 15 } 16 17 type indirectiface struct { 18 a, b, c int 19 } 20 21 func (i indirectiface) Value() int { 22 return i.a + i.b + i.c 23 } 24 25 func main() { 26 var r Valuer 27 rptr := &real{value: 3} 28 r = rptr 29 30 if r.Value() != 3 { // ERROR "de-virtualizing call$" 31 panic("not 3") 32 } 33 34 // Can't do types that aren't "direct" interfaces (yet). 35 r = indirectiface{3, 4, 5} 36 if r.Value() != 12 { 37 panic("not 12") 38 } 39 }