Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gccgo: internal compiler error with self-referential method in interface #6637

Closed
griesemer opened this issue Oct 21, 2013 · 6 comments
Closed

Comments

@griesemer
Copy link
Contributor

$ cat x.go
package p

import "unsafe"

type T interface {
     m() [unsafe.Sizeof(T(nil).m())]int
}

$ gccgo x.go
go1: internal compiler error: in insert, at go/gofrontend/gogo.cc:5946
0x55fccc Statement_inserter::insert(Statement*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:5946
0x5294d3 Interface_field_reference_expression::do_lower(Gogo*, Named_object*,
Statement_inserter*, int)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:11568
0x555a6e Expression::lower(Gogo*, Named_object*, Statement_inserter*, int)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.h:574
0x555a6e Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1712
0x555a6e Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1700
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x530c2c Call_expression::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:9177
0x555a29 Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1705
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x530ac0 Expression_list::traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:14695
0x530c43 Call_expression::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:9181
0x530c43 Call_expression::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:9175
0x555a29 Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1705
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x5992ea Array_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:5379
0x5992ea Array_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:5374
0x599234 Type::traverse(Type*, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:300
0x59f005 Typed_identifier_list::traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:9920
0x59f0bc Function_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:3150
0x59f0bc Function_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:3141
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://go.ext.google.com/go/>; for instructions.
@griesemer
Copy link
Contributor Author

Comment 1:

Here's a simpler program producing a similar (the same?) internal error:
package p
type T interface {
    m() [T(nil).m()[0]]int
}
$ gccgo x.go
go1: internal compiler error: in insert, at go/gofrontend/gogo.cc:5946
0x55fccc Statement_inserter::insert(Statement*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:5946
0x5294d3 Interface_field_reference_expression::do_lower(Gogo*, Named_object*,
Statement_inserter*, int)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:11568
0x555a6e Expression::lower(Gogo*, Named_object*, Statement_inserter*, int)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.h:574
0x555a6e Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1712
0x555a6e Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1700
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x530c2c Call_expression::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:9177
0x555a29 Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1705
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x526b23 Index_expression::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:10240
0x555a29 Lower_parse_tree::expression(Expression**)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/gogo.cc:1705
0x5268f5 Expression::traverse(Expression**, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/expressions.cc:52
0x5992ea Array_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:5379
0x5992ea Array_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:5374
0x599234 Type::traverse(Type*, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:300
0x59f005 Typed_identifier_list::traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:9920
0x59f0bc Function_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:3150
0x59f0bc Function_type::do_traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:3141
0x599234 Type::traverse(Type*, Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:300
0x59f005 Typed_identifier_list::traverse(Traverse*)
    /tmp/go-build-release/gccgo-srcdir/gcc/go/gofrontend/types.cc:9920
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://go.ext.google.com/go/>; for instructions.
Interestingly, a useful error message appears if an unused import is added:
$ cat x.go
package p
import "math"
type T interface {
    m() [T(nil).m()[0]]int
}
$ gccgo x.go
x.go:3:12: error: imported and not used: math
 import "math"
            ^
x.go:6:20: error: array bound is not constant
     m() [T(nil).m()[0]]int
                    ^

@rsc
Copy link
Contributor

rsc commented Nov 27, 2013

Comment 2:

Labels changed: added go1.3maybe.

@rsc
Copy link
Contributor

rsc commented Dec 4, 2013

Comment 3:

Labels changed: added release-none, removed go1.3maybe.

@rsc
Copy link
Contributor

rsc commented Dec 4, 2013

Comment 4:

Labels changed: added repo-gccgo.

@paranoiacblack
Copy link
Contributor

Comment 6:

For this issue, I'd also like to note that the struct parallel crashes as well:
$ cat x.go
package p
type T struct {
    m [T{}.m[0]]int
}
$ gccgo x.go
x.go:3:6: error: invalid recursive type ‘T’
 type T struct {
      ^
gccgo: internal compiler error: Segmentation fault (program go1)
0x406008 execute
    ../../gcc/gcc/gcc.c:2912
0x40a915 do_spec_1
    ../../gcc/gcc/gcc.c:4841
0x40de65 process_brace_body
    ../../gcc/gcc/gcc.c:6124
0x40dc94 handle_braces
    ../../gcc/gcc/gcc.c:6038
0x40c90b do_spec_1
    ../../gcc/gcc/gcc.c:5495
0x40de65 process_brace_body
    ../../gcc/gcc/gcc.c:6124
0x40dc94 handle_braces
    ../../gcc/gcc/gcc.c:6038
0x40c90b do_spec_1
    ../../gcc/gcc/gcc.c:5495
0x40ccf9 do_spec_1
    ../../gcc/gcc/gcc.c:5610
0x40de65 process_brace_body
    ../../gcc/gcc/gcc.c:6124
0x40dc94 handle_braces
    ../../gcc/gcc/gcc.c:6038
0x40c90b do_spec_1
    ../../gcc/gcc/gcc.c:5495
0x409f80 do_spec_2
    ../../gcc/gcc/gcc.c:4542
0x409e9e do_spec(char const*)
    ../../gcc/gcc/gcc.c:4509
0x4120d1 driver::do_spec_on_infiles() const
    ../../gcc/gcc/gcc.c:7678
0x40fa85 driver::main(int, char**)
    ../../gcc/gcc/gcc.c:6915
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html>; for instructions.

Labels changed: removed priority-triage, gccgo, release-none.

Owner changed to @paranoiacblack.

Status changed to Started.

@paranoiacblack
Copy link
Contributor

@golang golang locked and limited conversation to collaborators Jun 25, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants