diff options
Diffstat (limited to 'cparser/Cleanup.ml')
-rw-r--r-- | cparser/Cleanup.ml | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/cparser/Cleanup.ml b/cparser/Cleanup.ml index fe674d9b..75ee0e5a 100644 --- a/cparser/Cleanup.ml +++ b/cparser/Cleanup.ml @@ -118,11 +118,23 @@ let add_enum e = e (* Saturate the set of referenced identifiers, starting with externally - visible global declarations *) + visible global declarations. + + Externally-visible globals include a minima: + - Definitions of functions, unless "static" or "inline". + - Declaration of variables with default storage. + + We choose to also treat as visible and therefore to keep: + - "static" initialized variables, so that the checks on initializers + performed in C2C are performed on all initializers. + If the variable turns out to be unused, it will be removed + later by the Unusedglob pass. +*) let visible_decl (sto, id, ty, init) = - sto = Storage_default && - match ty with TFun _ -> false | _ -> true + init <> None || + (sto = Storage_default && + match ty with TFun _ -> false | _ -> true) let visible_fundef f = match f.fd_storage with |