summaryrefslogtreecommitdiffstats
path: root/src/evaluate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/evaluate.c')
-rw-r--r--src/evaluate.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index 4609576b..8b5f51ce 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -2016,12 +2016,16 @@ static int expr_evaluate_relational(struct eval_ctx *ctx, struct expr **expr)
/* fall through */
case OP_NEQ:
case OP_NEG:
- if (rel->op == OP_NEG &&
- (right->etype != EXPR_VALUE ||
- right->dtype->basetype == NULL ||
- right->dtype->basetype->type != TYPE_BITMASK))
- return expr_binary_error(ctx->msgs, left, right,
- "negation can only be used with singleton bitmask values");
+ if (rel->op == OP_NEG) {
+ if (left->etype == EXPR_BINOP)
+ return expr_binary_error(ctx->msgs, left, right,
+ "cannot combine negation with binary expression");
+ if (right->etype != EXPR_VALUE ||
+ right->dtype->basetype == NULL ||
+ right->dtype->basetype->type != TYPE_BITMASK)
+ return expr_binary_error(ctx->msgs, left, right,
+ "negation can only be used with singleton bitmask values");
+ }
switch (right->etype) {
case EXPR_RANGE: