diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-04 21:15:26 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-04 21:15:26 +0000 |
commit | eb83e2d7f0f746bf64276ebb3931b20ae0cd7398 (patch) | |
tree | fa876fbc35a8a9da0c569dcc86d12331cb6fe42c | |
parent | 1ed36e906f6cf62a4d4dad1c8989257eb97f5566 (diff) | |
download | gcc-eb83e2d7f0f746bf64276ebb3931b20ae0cd7398.zip gcc-eb83e2d7f0f746bf64276ebb3931b20ae0cd7398.tar.gz gcc-eb83e2d7f0f746bf64276ebb3931b20ae0cd7398.tar.bz2 |
Don't crash if tuple init redefines non-variable.
From-SVN: r168484
-rw-r--r-- | gcc/go/gofrontend/parse.cc | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index 13374f4..9e62583 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -1655,9 +1655,15 @@ Parse::init_vars_from_map(const Typed_identifier_list* vars, Type* type, if (!this->gogo_->in_global_scope()) this->gogo_->add_statement(s); else if (!val_no->is_sink()) - val_no->var_value()->add_preinit_statement(s); + { + if (val_no->is_variable()) + val_no->var_value()->add_preinit_statement(s); + } else if (!no->is_sink()) - no->var_value()->add_preinit_statement(s); + { + if (no->is_variable()) + no->var_value()->add_preinit_statement(s); + } else { // Execute the map index expression just so that we can fail if @@ -1716,9 +1722,15 @@ Parse::init_vars_from_receive(const Typed_identifier_list* vars, Type* type, if (!this->gogo_->in_global_scope()) this->gogo_->add_statement(s); else if (!val_no->is_sink()) - val_no->var_value()->add_preinit_statement(s); + { + if (val_no->is_variable()) + val_no->var_value()->add_preinit_statement(s); + } else if (!no->is_sink()) - no->var_value()->add_preinit_statement(s); + { + if (no->is_variable()) + no->var_value()->add_preinit_statement(s); + } else { Named_object* dummy = this->create_dummy_global(Type::lookup_bool_type(), @@ -1776,9 +1788,15 @@ Parse::init_vars_from_type_guard(const Typed_identifier_list* vars, if (!this->gogo_->in_global_scope()) this->gogo_->add_statement(s); else if (!val_no->is_sink()) - val_no->var_value()->add_preinit_statement(s); + { + if (val_no->is_variable()) + val_no->var_value()->add_preinit_statement(s); + } else if (!no->is_sink()) - no->var_value()->add_preinit_statement(s); + { + if (no->is_variable()) + no->var_value()->add_preinit_statement(s); + } else { Named_object* dummy = this->create_dummy_global(type, NULL, location); |