diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-03-01 17:11:55 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-03-01 17:11:55 +0000 |
commit | f34ce44b670778710e649492922f9f4ef349060b (patch) | |
tree | d7986db2f9960b6ae45f605cf45c83b49e148eec /gcc/go | |
parent | 0f68ba3ea390e3b71320cc3bf70deedbb9534223 (diff) | |
download | gcc-f34ce44b670778710e649492922f9f4ef349060b.zip gcc-f34ce44b670778710e649492922f9f4ef349060b.tar.gz gcc-f34ce44b670778710e649492922f9f4ef349060b.tar.bz2 |
compiler: Fix varargs functions that call recover.
Also fix a couple of crashes on invalid code.
From-SVN: r184751
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/expressions.h | 4 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index 6672b68..0a3f205 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -1066,6 +1066,10 @@ class Set_and_use_temporary_expression : public Expression { return this->expr_; } protected: + int + do_traverse(Traverse* traverse) + { return Expression::traverse(&this->expr_, traverse); } + Type* do_type(); diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index acc9231..ca57aea 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -2500,6 +2500,9 @@ Build_recover_thunks::function(Named_object* orig_no) Call_expression* call = Expression::make_call(fn, args, false, location); + // Any varargs call has already been lowered. + call->set_varargs_are_lowered(); + Statement* s; if (orig_fntype->results() == NULL || orig_fntype->results()->empty()) s = Statement::make_statement(call, true); @@ -5346,5 +5349,5 @@ Statement_inserter::insert(Statement* s) else if (this->var_ != NULL) this->var_->add_preinit_statement(this->gogo_, s); else - go_unreachable(); + go_assert(saw_errors()); } |