diff options
author | Florian Westphal <fw@strlen.de> | 2023-12-04 18:30:51 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2023-12-05 12:43:21 +0100 |
commit | 45a4d4434742b425d019623812f2cce293033cdf (patch) | |
tree | ac7fab2588615e8ea5b0ab7acaffa0142fa28cbe /src/evaluate.c | |
parent | 3671c48970031e617ee713b79caf8ef0a1b096c2 (diff) |
evaluate: error out if basetypes are different
prefer
binop_with_different_basetype_assert:3:29-35: Error: Binary operation (<<) with different base types (string vs integer) is not supported
oifname set ip9dscp << 26 | 0x10
^^^^^^^~~~~~~
to assertion failure.
Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r-- | src/evaluate.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index b6670254..51ae276a 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1451,8 +1451,11 @@ static int expr_evaluate_binop(struct eval_ctx *ctx, struct expr **expr) "for %s expressions", sym, expr_name(right)); - /* The grammar guarantees this */ - assert(datatype_equal(expr_basetype(left), expr_basetype(right))); + if (!datatype_equal(expr_basetype(left), expr_basetype(right))) + return expr_binary_error(ctx->msgs, left, op, + "Binary operation (%s) with different base types " + "(%s vs %s) is not supported", + sym, expr_basetype(left)->name, expr_basetype(right)->name); switch (op->op) { case OP_LSHIFT: |