diff --git a/src/kernel_internals/typing/cabs2cil.ml b/src/kernel_internals/typing/cabs2cil.ml index 4bc7199b1bedb2b59684124bda7553ac9e29bffc..abb0e06bdcd170a45fd0b8945af02f66dfa32c1c 100644 --- a/src/kernel_internals/typing/cabs2cil.ml +++ b/src/kernel_internals/typing/cabs2cil.ml @@ -1425,7 +1425,7 @@ let rec isConstTrueFalse c: [ `CTrue | `CFalse ] = | CReal(f, _, _) -> if f = 0.0 then `CFalse else `CTrue | CEnum {eival = e} -> - match isExpTrueFalse e with + match isExpTrueFalse (Cil.constFold true e) with | `CTrue | `CFalse as r -> r | `CUnknown -> Kernel.fatal ~current:true "Non-constant enum" (* Evaluate expressions to `CTrue, `CFalse or `CUnknown *) diff --git a/tests/syntax/enum1.c b/tests/syntax/enum1.c index 74487342a08ae8ec1c9ce9187d903670247f8a2e..869661328786046e9294df659a1685eb4f2fff43 100644 --- a/tests/syntax/enum1.c +++ b/tests/syntax/enum1.c @@ -28,3 +28,9 @@ enum Foo { EN1, EN2, EN3 }; int f() { return !EN1; } int g() { return EN1; } + +enum Bar { CONST_ENUM = 1 == 2 }; + +int h() { + return CONST_ENUM ? 0 : 1; +} diff --git a/tests/syntax/oracle/enum1.res.oracle b/tests/syntax/oracle/enum1.res.oracle index 73766d556e65a6db1589a45abca908fd72e4e2c0..b0fc1e66898644fa10f76ebccda12d9ec25b6f8b 100644 --- a/tests/syntax/oracle/enum1.res.oracle +++ b/tests/syntax/oracle/enum1.res.oracle @@ -67,6 +67,13 @@ int g(void) return __retres; } +int h(void) +{ + int __retres; + __retres = 1; + return __retres; +} + int e2(void) { int __retres;