summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-09-27 14:23:28 +0200
committerFlorian Westphal <fw@strlen.de>2023-12-12 15:27:37 +0100
commitd07c874797295f425541464ac84864e591fc0614 (patch)
treeb3aec4f61d5caa0ca462127183bb0bfce039e449
parent567937b5560fbcc7f6b74fb43c52e1cab2ac425a (diff)
netlink_linearize: avoid strict-overflow warning in netlink_gen_bitwise()
With gcc-13.2.1-1.fc38.x86_64: $ gcc -Iinclude -c -o tmp.o src/netlink_linearize.c -Werror -Wstrict-overflow=5 -O3 src/netlink_linearize.c: In function ‘netlink_gen_bitwise’: src/netlink_linearize.c:1790:1: error: assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C2 -+ C1 [-Werror=strict-overflow] 1790 | } | ^ cc1: all warnings being treated as errors It also makes more sense this way, where "n" is the hight of the "binops" stack, and we check for a non-empty stack with "n > 0" and pop the last element with "binops[--n]". Signed-off-by: Thomas Haller <thaller@redhat.com> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/netlink_linearize.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index df395bac..61828eb9 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -711,14 +711,13 @@ static void netlink_gen_bitwise(struct netlink_linearize_ctx *ctx,
while (left->etype == EXPR_BINOP && left->left != NULL &&
(left->op == OP_AND || left->op == OP_OR || left->op == OP_XOR))
binops[n++] = left = left->left;
- n--;
- netlink_gen_expr(ctx, binops[n--], dreg);
+ netlink_gen_expr(ctx, binops[--n], dreg);
mpz_bitmask(mask, expr->len);
mpz_set_ui(xor, 0);
- for (; n >= 0; n--) {
- i = binops[n];
+ while (n > 0) {
+ i = binops[--n];
mpz_set(val, i->right->value);
switch (i->op) {