Hi, These three expressions use the same layout but they have a different purpose, it is better to split them in independent layouts. The compound expression still remains in place, there, the initial layout to store the list of expressions and size is still in the same in these expressions. The initial three patch address type confusions uncovered by patch 4/4 in this series. This is implicitly reducing the size of one of the largest structs in the union area of struct expr, still EXPR_SET_ELEM remains the largest so no gain is achieved in this iteration. Pablo Neira Ayuso (4): evaluate: mappings require set expression evaluate: validate set expression type before accessing flags src: convert set to list expression src: detach set, list and concatenation expression layout include/expression.h | 22 ++++- src/cmd.c | 5 +- src/evaluate.c | 185 ++++++++++++++++++++++++-------------- src/expression.c | 41 ++++----- src/intervals.c | 80 ++++++++--------- src/json.c | 10 +-- src/mergesort.c | 2 +- src/mnl.c | 13 ++- src/monitor.c | 2 +- src/netlink.c | 26 +++--- src/netlink_delinearize.c | 14 +-- src/netlink_linearize.c | 2 +- src/optimize.c | 22 ++--- src/parser_bison.y | 2 +- src/parser_json.c | 5 +- src/rule.c | 4 +- src/segtree.c | 22 ++--- 17 files changed, 261 insertions(+), 196 deletions(-) -- 2.30.2