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
Labels
Comments
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 ^ |
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. |
This was fixed in https://code.google.com/p/gofrontend/source/detail?r=2a85649c19e1. |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
The text was updated successfully, but these errors were encountered: