aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/StructReturn.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2015-11-09 17:03:47 +0100
committerXavier Leroy <xavier.leroy@inria.fr>2015-11-09 17:03:47 +0100
commit35e3f39bf967c4ed2ba3390b488604554306065d (patch)
tree6ec4f40aab63e818693786145de937ef7a2870eb /cparser/StructReturn.ml
parente79e6fe5e4da4cf4c9852456f5ad82e633551cc9 (diff)
downloadcompcert-35e3f39bf967c4ed2ba3390b488604554306065d.tar.gz
compcert-35e3f39bf967c4ed2ba3390b488604554306065d.zip
Handle large static initializers for global arrays
Use tail-recursive operations to implement transformations on initializers for global arrays. This way, very large static initializers no longer cause stack overflows at compile-time.
Diffstat (limited to 'cparser/StructReturn.ml')
-rw-r--r--cparser/StructReturn.ml2
1 files changed, 1 insertions, 1 deletions
diff --git a/cparser/StructReturn.ml b/cparser/StructReturn.ml
index 2c6fd1d2..82c0a04c 100644
--- a/cparser/StructReturn.ml
+++ b/cparser/StructReturn.ml
@@ -412,7 +412,7 @@ and transf_init env = function
| Init_single e ->
Init_single (transf_expr env Val e)
| Init_array il ->
- Init_array (List.map (transf_init env) il)
+ Init_array (List.rev (List.rev_map (transf_init env) il))
| Init_struct(id, fil) ->
Init_struct (id, List.map (fun (fld, i) -> (fld, transf_init env i)) fil)
| Init_union(id, fld, i) ->