diff options
| author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-04 21:15:26 +0000 |
|---|---|---|
| committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-04 21:15:26 +0000 |
| commit | 699f7ec791b9337046d3e95becb7b0b5ddebc0cc (patch) | |
| tree | fa876fbc35a8a9da0c569dcc86d12331cb6fe42c | |
| parent | a68492b4c22cdea7e31f1f9ee07d3a47f9a35e45 (diff) | |
| download | ppe42-gcc-699f7ec791b9337046d3e95becb7b0b5ddebc0cc.tar.gz ppe42-gcc-699f7ec791b9337046d3e95becb7b0b5ddebc0cc.zip | |
Don't crash if tuple init redefines non-variable.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168484 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 13374f40bcc..9e62583f6c6 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); |

