let process_global_init wenv obj =
    let do_asgn lv e obj =
      Wp_parameters.debug ~level:3 "global init : %a <- %a@."
        !Ast_printer.d_lval lv !Ast_printer.d_exp e;
      W.assign wenv lv e obj
    in
    let rec do_init obj lv init = match init with
      | SingleInit e -> do_asgn lv e obj
      | CompoundInit (_, l) ->
          let doit obj (off, init) =
            do_init obj (Cil.addOffsetLval off lv) init
          in List.fold_left doit obj l
    in
    let do_glob_var var init obj = match init.init with None -> obj
        | Some init -> do_init obj (Var var, NoOffset) init
    in

    let do_glob glob obj = match glob with
      | GVar (var, initinfo, loc) ->
          let old_loc = Cil.CurrentLoc.get () in
            Cil.CurrentLoc.set loc;
          let obj = do_glob_var var initinfo obj in
            Cil.CurrentLoc.set old_loc;
            obj
      | _ -> obj
    in
    let ast = Ast.get () in
      List.fold_right do_glob ast.globals obj