compiler: report error for ++/-- applied to a non-numeric type

This avoids a compiler crash.
    
    Fixes GCC PR 83071.
    
    Reviewed-on: https://go-review.googlesource.com/78875

From-SVN: r254983
This commit is contained in:
Ian Lance Taylor 2017-11-21 06:14:32 +00:00
parent 8c09856788
commit 5e43a9eeca
2 changed files with 6 additions and 1 deletions

View file

@ -1,4 +1,4 @@
cb5dc1ce98857884a2215c461dd1d7de530f9f5e
5485b3faed476f6d051833d1790b5f77be9d1efc
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View file

@ -1826,6 +1826,11 @@ Statement*
Inc_dec_statement::do_lower(Gogo*, Named_object*, Block*, Statement_inserter*)
{
Location loc = this->location();
if (!this->expr_->type()->is_numeric_type())
{
this->report_error("increment or decrement of non-numeric type");
return Statement::make_error_statement(loc);
}
Expression* oexpr = Expression::make_integer_ul(1, this->expr_->type(), loc);
Operator op = this->is_inc_ ? OPERATOR_PLUSEQ : OPERATOR_MINUSEQ;
return Statement::make_assignment_operation(op, this->expr_, oexpr, loc);