From 1ebccda60b38b1a9f8005b6ebde93ecb10c8aa59 Mon Sep 17 00:00:00 2001
From: xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>
Date: Tue, 15 Sep 2009 10:09:19 +0000
Subject: [PATCH] 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 914f5cad8..853800384 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 7285bb7df49650127faf77b26bf638c1439a50fc..a1d91bc32fffd4b31976876b879e0efac09e9a07 100644
GIT binary patch
delta 23
ecmbQrw1jDcC?kJ`p|OIkLbZZ{j)I{=Ef)Yr>;+o@

delta 7
OcmZ3&G?i(CC?fy~y8;9N

diff --git a/test/c/initializers.c b/test/c/initializers.c
index 5fa4fd4ad..2c52d51a0 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;
 }
 
-- 
GitLab