aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/Cutil.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bschommer@users.noreply.github.com>2018-08-20 10:42:22 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2018-08-20 10:42:21 +0200
commite9b5632617b1477603883aab543994e2a1c464ce (patch)
treed2f67322c1ff09ed2a6c6c3aa64e8b40421ade33 /cparser/Cutil.ml
parent6fc89e5c8c4a8f98ef0a4a03c00994bbfb146431 (diff)
downloadcompcert-kvx-e9b5632617b1477603883aab543994e2a1c464ce.tar.gz
compcert-kvx-e9b5632617b1477603883aab543994e2a1c464ce.zip
Additional checks for flex arrays in structs (#93)
* Error for structs with only flex array member Flexible array members are only allowed if another member exists. Bug 23324 * Added checks for nesting of structs with flex array members Warn if a struct with a flex array member is used as array element or member of another struct. Such usage is dubious. Bug 23324 Don't warn if the struct-with-flex-array is a member of an union.
Diffstat (limited to 'cparser/Cutil.ml')
-rw-r--r--cparser/Cutil.ml11
1 files changed, 11 insertions, 0 deletions
diff --git a/cparser/Cutil.ml b/cparser/Cutil.ml
index 3e2dff36..dcafbea4 100644
--- a/cparser/Cutil.ml
+++ b/cparser/Cutil.ml
@@ -1048,6 +1048,17 @@ let is_bitfield env e =
fld.fld_bitfield <> None
| _ -> false
+let contains_flex_array_mem env ty =
+ match unroll env ty with
+ | TStruct (id,_) ->
+ let ci = Env.find_struct env id in
+ let rec check_mem = function
+ | [] -> false
+ | [ { fld_typ = TArray(ty_elt, None, _) } ] -> true
+ | _::rem -> check_mem rem in
+ check_mem ci.ci_members
+ | _ -> false
+
(* Assignment compatibility check over attributes.
Standard attributes ("const", "volatile", "restrict") can safely
be added (to the rhs type to get the lhs type) but must not be dropped.