From 65205e30c40701fcf161484e98d631fa36b5298d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 13 Oct 2016 16:21:28 +0000 Subject: [PATCH] compiler: don't try to get backend representation of redefinition Trying to get the backend representation of a redefined name can cause a compiler crash as the compiler can walk over the same statements a second time. It's also quite unlikely to produce any additional useful error messages for the user. Test case follows. I'm not going to bother adding this test case to the testsuite--crash-on-invalid cases are worth fixing but not worth continually retesting. package p type A []int func (a A) Sum() (sum int) { for _, v := range a { sum += v } return sum } type A []int func (a A) Sum() (sum int) { for _, v := range a { sum += v } return sum } Reviewed-on: https://go-review.googlesource.com/30976 From-SVN: r241127 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/gogo.cc | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 0a116a835e9..6e689f464a9 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -681580a3afc687ba3ff9ef240c67e8630e4306e6 +e3913d96fb024b916c87a4dc01f413523467ead9 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 30392f76b3f..9491e51258e 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -7214,6 +7214,14 @@ Named_object::get_backend(Gogo* gogo, std::vector& const_decls, std::vector& type_decls, std::vector& func_decls) { + // If this is a definition, avoid trying to get the backend + // representation, as that can crash. + if (this->is_redefinition_) + { + go_assert(saw_errors()); + return; + } + switch (this->classification_) { case NAMED_OBJECT_CONST: -- 2.30.2