// RUN: llgo -o %t %s // RUN: %t 2>&1 | FileCheck %s // CHECK: X() // CHECK-NEXT: Y() // CHECK-NEXT: X() // CHECK-NEXT: Y() // CHECK-NEXT: X() package main type Stringer interface { String() string } type X int type Y int type Z1 struct { X } type Z2 struct { Stringer } func (x X) String() string { return "X()" } func (y *Y) String() string { return "Y()" } func makeX() X { return X(0) } func main() { var z Stringer = X(0) println(z.String()) z = new(Y) println(z.String()) z = Z1{} println(z.String()) z = Z2{new(Y)} println(z.String()) println(makeX().String()) }