mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-22 20:36:20 +08:00
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
This commit is contained in:
parent
5117a23e9f
commit
65205e30c4
@ -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.
|
||||
|
@ -7214,6 +7214,14 @@ Named_object::get_backend(Gogo* gogo, std::vector<Bexpression*>& const_decls,
|
||||
std::vector<Btype*>& type_decls,
|
||||
std::vector<Bfunction*>& 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:
|
||||
|
Loading…
Reference in New Issue
Block a user