diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2021-09-21 16:30:19 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2021-09-28 10:25:35 +0200 |
commit | 6ede270e6f386a099bc898307168e75ebd819c7e (patch) | |
tree | f5f1e6d35f383da93346ff38e05a87b2f104f1a9 /cparser/Cutil.ml | |
parent | 2892e2caa89f927062824ca901562d085a76d619 (diff) | |
download | compcert-6ede270e6f386a099bc898307168e75ebd819c7e.tar.gz compcert-6ede270e6f386a099bc898307168e75ebd819c7e.zip |
Ignore unnamed bit fields for initialization of unions
When a union is initialized with an initializer without designator the
first named member should be initialized. This commit skips members
without names during the elaboration of union initializers.
Note that anonymous members (unnamed members of struct or union type)
should not be skipped, and are not skipped since elaboration give names
to these members.
Bug 31982
Diffstat (limited to 'cparser/Cutil.ml')
-rw-r--r-- | cparser/Cutil.ml | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cparser/Cutil.ml b/cparser/Cutil.ml index d3a830ce..bcdea107 100644 --- a/cparser/Cutil.ml +++ b/cparser/Cutil.ml @@ -1263,11 +1263,16 @@ let rec default_init env ty = let ci = Env.find_struct env id in Init_struct(id, default_init_fields ci.ci_members) | TUnion(id, _) -> - let ci = Env.find_union env id in - begin match ci.ci_members with + let ci = Env.find_union env id in + let rec default_init_field = function | [] -> raise No_default_init - | fld :: _ -> Init_union(id, fld, default_init env fld.fld_typ) - end + | fld :: fl -> + if fld.fld_name = "" then + default_init_field fl + else + Init_union(id, fld, default_init env fld.fld_typ) + in + default_init_field ci.ci_members | _ -> raise No_default_init |