diff options
Diffstat (limited to 'test/devirt.go')
-rw-r--r-- | test/devirt.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/devirt.go b/test/devirt.go new file mode 100644 index 0000000..d5c8152 --- /dev/null +++ b/test/devirt.go @@ -0,0 +1,38 @@ +// 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") + } +} |