From: ian Date: Mon, 7 May 2012 18:24:32 +0000 (+0000) Subject: compiler: reject NOT operator on integer types. X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=4c4119e10843664e73489224bb84484c8ca8a973;hp=1a96c96a90b1a4581bb04b9d6d6fb99e754c11bc compiler: reject NOT operator on integer types. The Go specification only accepts the NOT operator on boolean types. Fixes issue 10. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@187263 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index a266694d24c..39824bfcb6f 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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())