re PR go/60288 (gccgo crashes compiling '*func_ptr(0)')
PR go/60288 compiler: Avoid crash, give error for *&x when x is not addressable. From-SVN: r207960
This commit is contained in:
parent
efd2d3c8c4
commit
7f5e818877
1 changed files with 13 additions and 1 deletions
|
@ -3792,6 +3792,12 @@ Unary_expression::do_lower(Gogo*, Named_object*, Statement_inserter*, int)
|
|||
if (e == expr)
|
||||
{
|
||||
// *&x == x.
|
||||
if (!ue->expr_->is_addressable() && !ue->create_temp_)
|
||||
{
|
||||
error_at(ue->location(),
|
||||
"invalid operand for unary %<&%>");
|
||||
this->set_is_error();
|
||||
}
|
||||
return ue->expr_;
|
||||
}
|
||||
ue->set_does_not_escape();
|
||||
|
@ -3828,6 +3834,9 @@ Expression*
|
|||
Unary_expression::do_flatten(Gogo* gogo, Named_object*,
|
||||
Statement_inserter* inserter)
|
||||
{
|
||||
if (this->is_error_expression() || this->expr_->is_error_expression())
|
||||
return Expression::make_error(this->location());
|
||||
|
||||
Location location = this->location();
|
||||
if (this->op_ == OPERATOR_MULT
|
||||
&& !this->expr_->is_variable())
|
||||
|
@ -4167,7 +4176,10 @@ Unary_expression::do_check_types(Gogo*)
|
|||
if (!this->expr_->is_addressable())
|
||||
{
|
||||
if (!this->create_temp_)
|
||||
this->report_error(_("invalid operand for unary %<&%>"));
|
||||
{
|
||||
error_at(this->location(), "invalid operand for unary %<&%>");
|
||||
this->set_is_error();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue