compiler: reject NOT operator on integer types.
The Go specification only accepts the NOT operator on boolean types. Fixes issue 10. From-SVN: r187263
This commit is contained in:
parent
2fb3f74005
commit
69bc1c3c53
|
@ -3606,8 +3606,7 @@ Unary_expression::do_lower(Gogo*, Named_object*, Statement_inserter*, int)
|
|||
return Expression::make_error(this->location());
|
||||
}
|
||||
|
||||
if (op == OPERATOR_PLUS || op == OPERATOR_MINUS
|
||||
|| op == OPERATOR_NOT || op == OPERATOR_XOR)
|
||||
if (op == OPERATOR_PLUS || op == OPERATOR_MINUS || op == OPERATOR_XOR)
|
||||
{
|
||||
Numeric_constant nc;
|
||||
if (expr->numeric_constant_value(&nc))
|
||||
|
@ -3697,10 +3696,10 @@ Unary_expression::eval_constant(Operator op, const Numeric_constant* unc,
|
|||
else
|
||||
go_unreachable();
|
||||
|
||||
case OPERATOR_NOT:
|
||||
case OPERATOR_XOR:
|
||||
break;
|
||||
|
||||
case OPERATOR_NOT:
|
||||
case OPERATOR_AND:
|
||||
case OPERATOR_MULT:
|
||||
return false;
|
||||
|
@ -3911,6 +3910,10 @@ Unary_expression::do_check_types(Gogo*)
|
|||
break;
|
||||
|
||||
case OPERATOR_NOT:
|
||||
if (!type->is_boolean_type())
|
||||
this->report_error(_("expected boolean type"));
|
||||
break;
|
||||
|
||||
case OPERATOR_XOR:
|
||||
if (type->integer_type() == NULL
|
||||
&& !type->is_boolean_type())
|
||||
|
|
Loading…
Reference in New Issue