From: Ian Lance Taylor Date: Thu, 1 Mar 2012 17:11:55 +0000 (+0000) Subject: compiler: Fix varargs functions that call recover. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f34ce44b670778710e649492922f9f4ef349060b;p=gcc.git compiler: Fix varargs functions that call recover. Also fix a couple of crashes on invalid code. From-SVN: r184751 --- diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index 6672b684e47..0a3f2050dd4 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 acc92317dcc..ca57aea26ee 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()); }