Skip to content

cmd/compile: 8MB error message for one char error #6589

Open
@griesemer

Description

@griesemer
$ 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions