let rec init_global_variable wenv lv init obj =
match init with
| SingleInit exp ->
W.init_value wenv lv (Cil.typeOfLval lv)(Some exp) obj
| CompoundInit ( ct , initl ) ->
let len = List.length initl in
let implicit_defaults =
match ct with
| TArray (ty,Some {enode = (Const CInt64 (size,_,_))},_,_)
when My_bigint.lt (My_bigint.of_int len) size ->
W.init_range wenv lv ty
(Int64.of_int len) (My_bigint.to_int64 size) obj
| TComp (cp,_,_) when len < (List.length cp.cfields) ->
List.fold_left
(fun obj f ->
if List.exists
(function (Field(g,_),_) -> Fieldinfo.equal f g | _ -> false)
initl
then obj
else
W.init_value wenv
(Cil.addOffsetLval (Field(f, NoOffset)) lv)
f.ftype None obj)
obj (List.rev cp.cfields)
| _ -> obj
in
List.fold_left
(fun obj (off,init) ->
let lv = Cil.addOffsetLval off lv in
init_global_variable wenv lv init obj)
implicit_defaults (List.rev initl)