Initial commit: Go 1.23 release state
This commit is contained in:
38
test/devirt.go
Normal file
38
test/devirt.go
Normal file
@@ -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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user