From: Ian Lance Taylor Date: Wed, 11 May 2011 19:39:21 +0000 (+0000) Subject: Don't crash ranging over call to builtin function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2d8f63a164c48a7e287987040927e40df7a97cab;p=gcc.git Don't crash ranging over call to builtin function. From-SVN: r173671 --- diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 93384867f41..005173b90c8 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -8527,9 +8527,9 @@ Call_expression::lower_varargs(Gogo* gogo, Named_object* function, new_args->push_back(Expression::make_nil(loc)); // We can't return a new call expression here, because this one may - // be referenced by Call_result expressions. FIXME. - if (old_args != NULL) - delete old_args; + // be referenced by Call_result expressions. FIXME. We can't + // delete OLD_ARGS because we may have both a Call_expression and a + // Builtin_call_expression which refer to them. FIXME. this->args_ = new_args; this->varargs_are_lowered_ = true; @@ -9250,8 +9250,8 @@ Index_expression::do_lower(Gogo*, Named_object*, int) error_at(location, "invalid slice of map"); return Expression::make_error(location); } - Map_index_expression* ret= Expression::make_map_index(left, start, - location); + Map_index_expression* ret = Expression::make_map_index(left, start, + location); if (this->is_lvalue_) ret->set_is_lvalue(); return ret; diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index 4fdf8f14201..4d335bb4507 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -4536,7 +4536,7 @@ For_range_statement::do_lower(Gogo* gogo, Named_object*, Block* enclosing) else { this->report_error(_("range clause must have " - "array, slice, setring, map, or channel type")); + "array, slice, string, map, or channel type")); return Statement::make_error_statement(this->location()); } @@ -4552,6 +4552,7 @@ For_range_statement::do_lower(Gogo* gogo, Named_object*, Block* enclosing) { range_temp = Statement::make_temporary(NULL, this->range_, loc); temp_block->add_statement(range_temp); + this->range_ = NULL; } Temporary_statement* index_temp = Statement::make_temporary(index_type,