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.
This commit is contained in:
Matthew Sotoudeh 2023-07-20 15:00:48 -07:00 committed by GitHub
parent 90d1f7f199
commit afd9b066b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 0 deletions

View File

@ -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: