Open
Description
$ cat x.go package p type A interface { a() interface{AB} } type B interface { a() interface{AB} } type AB interface { a() interface{A;B} b() interface{A;B} } var x AB var y interface{A;B} var _ = x == y $ go tool 6g x.go x.go:12: duplicate method a x.go:13: duplicate method a x.go:17: duplicate method a x.go:18: invalid operation: x == y (mismatched types AB and interface { a() interface { a() interface { a() interface { a() interface { a() interface { a() interface { a() interface { a() interface { a() interface { a() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a<...> } } } } } } } } } } }; b() interface { a<...>; a() interface { a() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a<...> } } } } } } } } }; b() interface { a<...>; a() interface { a() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a<...> } } } } } } }; b() interface { a<...>; a() interface { a() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a<...> } } } } }; b() interface { a<...>; a() interface { a() interface { a<...>; a() interface { a<...>; b() interface { a<...>; a<...> } } };... $ go tool 6g x.go | wc 4 1586257 8248570 When the program is fixed (rename method a in interface B to b), the compiler runs extremely long: $ time go tool 6g x.go real 0m19.170s user 0m17.352s sys 0m1.037s For comparison, for the incorrect program, gccgo reports: $ gccgo x.go x.go:12:20: error: inherited method 'a' is ambiguous a() interface{A;B} ^ x.go:13:20: error: inherited method 'a' is ambiguous b() interface{A;B} ^ x.go:17:17: error: inherited method 'a' is ambiguous var y interface{A;B} ^ x.go:18:11: error: incompatible types in binary expression var _ = x == y ^ For the correct program, gcc does not appear slower than usual.