diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-24 02:51:00 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-24 02:51:00 +0000 |
commit | 63cc9deb7cad1672212fc84df0ca48900af236e6 (patch) | |
tree | d1bae18646ccb3fdc0eae27f3689aa88288ea025 /gcc | |
parent | 1b4d46a696a3b95355575127e263b077fd073d37 (diff) | |
download | gcc-63cc9deb7cad1672212fc84df0ca48900af236e6.zip gcc-63cc9deb7cad1672212fc84df0ca48900af236e6.tar.gz gcc-63cc9deb7cad1672212fc84df0ca48900af236e6.tar.bz2 |
Don't crash on bad receiver when building recover thunks.
From-SVN: r170452
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index f1404cc..a63abfe 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -2205,10 +2205,14 @@ Build_recover_thunks::function(Named_object* orig_no) const std::string& new_receiver_name(orig_fntype->receiver()->name()); Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name); - gcc_assert(new_rec_no != NULL - && new_rec_no->is_variable() - && new_rec_no->var_value()->is_receiver()); - new_rec_no->var_value()->set_is_not_receiver(); + if (new_rec_no == NULL) + gcc_assert(saw_errors()); + else + { + gcc_assert(new_rec_no->is_variable() + && new_rec_no->var_value()->is_receiver()); + new_rec_no->var_value()->set_is_not_receiver(); + } } // Because we flipped blocks but not types, the can_recover |