Skip to content

Commit

Permalink
compiler: Don't crash on invalid builtin calls.
Browse files Browse the repository at this point in the history
    
    Fixes golang/go#11544.
    
    Reviewed-on: https://go-review.googlesource.com/13893


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227245 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
ian committed Aug 27, 2015
1 parent 1527db4 commit 79651b1
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
2 changes: 1 addition & 1 deletion gcc/go/gofrontend/MERGE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cd5362c7bb0b207f484a8dfb8db229fd2bffef09
5ee78e7d52a4cad0b23f5bc62e5b452489243c70

The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
12 changes: 9 additions & 3 deletions gcc/go/gofrontend/expressions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6588,7 +6588,11 @@ Builtin_call_expression::Builtin_call_expression(Gogo* gogo,
recover_arg_is_set_(false)
{
Func_expression* fnexp = this->fn()->func_expression();
go_assert(fnexp != NULL);
if (fnexp == NULL)
{
this->code_ = BUILTIN_INVALID;
return;
}
const std::string& name(fnexp->named_object()->name());
if (name == "append")
this->code_ = BUILTIN_APPEND;
Expand Down Expand Up @@ -6661,7 +6665,7 @@ Expression*
Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function,
Statement_inserter* inserter, int)
{
if (this->classification() == EXPRESSION_ERROR)
if (this->is_error_expression())
return this;

Location loc = this->location();
Expand Down Expand Up @@ -7500,11 +7504,13 @@ Builtin_call_expression::do_discarding_value()
Type*
Builtin_call_expression::do_type()
{
if (this->is_error_expression())
return Type::make_error_type();
switch (this->code_)
{
case BUILTIN_INVALID:
default:
go_unreachable();
return Type::make_error_type();

case BUILTIN_NEW:
case BUILTIN_MAKE:
Expand Down

0 comments on commit 79651b1

Please sign in to comment.