From 3f36cc6c3dcd5579841d169e495e49507846f3ce Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Thu, 3 Mar 2022 14:56:58 +0100 Subject: optimize: do not merge unsupported statement expressions Only value, range, prefix, set and list are supported at this stage. Signed-off-by: Pablo Neira Ayuso --- src/optimize.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/optimize.c b/src/optimize.c index 6ba7e5a1..f8dd7f8d 100644 --- a/src/optimize.c +++ b/src/optimize.c @@ -91,6 +91,23 @@ static bool __expr_cmp(const struct expr *expr_a, const struct expr *expr_b) return true; } +static bool stmt_expr_supported(const struct expr *expr) +{ + switch (expr->right->etype) { + case EXPR_SYMBOL: + case EXPR_RANGE: + case EXPR_PREFIX: + case EXPR_SET: + case EXPR_LIST: + case EXPR_VALUE: + return true; + default: + break; + } + + return false; +} + static bool __stmt_type_eq(const struct stmt *stmt_a, const struct stmt *stmt_b) { struct expr *expr_a, *expr_b; @@ -103,6 +120,10 @@ static bool __stmt_type_eq(const struct stmt *stmt_a, const struct stmt *stmt_b) expr_a = stmt_a->expr; expr_b = stmt_b->expr; + if (!stmt_expr_supported(expr_a) || + !stmt_expr_supported(expr_b)) + return false; + return __expr_cmp(expr_a->left, expr_b->left); case STMT_COUNTER: case STMT_NOTRACK: -- cgit v1.2.3