From 1ebccda60b38b1a9f8005b6ebde93ecb10c8aa59 Mon Sep 17 00:00:00 2001 From: xleroy Date: Tue, 15 Sep 2009 10:09:19 +0000 Subject: Problem with const enum initializers git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1146 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- cfrontend/Cil2Csyntax.ml | 2 ++ test/c/Results/initializers | Bin 277 -> 292 bytes test/c/initializers.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/cfrontend/Cil2Csyntax.ml b/cfrontend/Cil2Csyntax.ml index 914f5cad..85380038 100644 --- a/cfrontend/Cil2Csyntax.ml +++ b/cfrontend/Cil2Csyntax.ml @@ -158,6 +158,8 @@ and eval_cast ty v = | TInt(ik, _), CInt64(v, _, _) -> mkint64 ik v | TInt(ik, _), CReal(v, _, _) -> if ik = IULongLong then raise NotConst else mkint64 ik (Int64.of_float v) + | TEnum _, CInt64(v, _, _) -> mkint64 IInt v + | TEnum _, CReal(v, _, _) -> mkint64 IInt (Int64.of_float v) | TFloat(fk, _), CReal(v, _, _) -> mkfloat fk v | TFloat(fk, _), CInt64(v, ik, _) -> if ik = IULongLong then raise NotConst else mkfloat fk (Int64.to_float v) diff --git a/test/c/Results/initializers b/test/c/Results/initializers index 7285bb7d..a1d91bc3 100644 Binary files a/test/c/Results/initializers and b/test/c/Results/initializers differ diff --git a/test/c/initializers.c b/test/c/initializers.c index 5fa4fd4a..2c52d51a 100644 --- a/test/c/initializers.c +++ b/test/c/initializers.c @@ -27,6 +27,9 @@ float x11 = 1 + 1 / 3.14159; double x12 = 1 / 3.14159 + 1; +typedef enum { AAA , BBB } MyEnum; + +const MyEnum x13[2] = { AAA, BBB }; int main(int argc, char ** argv) { @@ -50,6 +53,7 @@ int main(int argc, char ** argv) x10.u.y, x10.u.z, x10.v); printf("x11 = %.10f\n", x11); printf("x12 = %.10f\n", x12); + printf("x13 = { %d, %d }\n", x13[0], x13[1]); return 0; } -- cgit