From afd9b066b7f775275ebf810aaa02f5c4c5da8780 Mon Sep 17 00:00:00 2001 From: Matthew Sotoudeh Date: Thu, 20 Jul 2023 15:00:48 -0700 Subject: [PATCH] Allow modulus in constant expressions Not sure if this was intentional, but I noticed `eval2(...)` will compile-time evaluate a modulus but `is_const_expr(...)` won't. This causes chibicc to try and compile some arrays as VLAs, which was causing problems for me. This change adds `ND_MOD` to the list of allowed constant expressions. It's possible I'm missing something, but https://en.cppreference.com/w/c/language/constant_expression seems to imply that all numeric operators (including modulus) should be OK in constant expressions. And `ND_DIV` is already allowed in the function so it seems `ND_MOD` should be as well. --- parse.c | 1 + 1 file changed, 1 insertion(+) diff --git a/parse.c b/parse.c index 6acaeb8..871db96 100644 --- a/parse.c +++ b/parse.c @@ -1954,6 +1954,7 @@ static bool is_const_expr(Node *node) { case ND_SUB: case ND_MUL: case ND_DIV: + case ND_MOD: case ND_BITAND: case ND_BITOR: case ND_BITXOR: