From f34ce44b670778710e649492922f9f4ef349060b Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 1 Mar 2012 17:11:55 +0000 Subject: compiler: Fix varargs functions that call recover. Also fix a couple of crashes on invalid code. From-SVN: r184751 --- gcc/go/gofrontend/expressions.h | 4 ++++ gcc/go/gofrontend/gogo.cc | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'gcc/go') 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()); } -- cgit v1.1