let state_top_addresses_of_locals ~is_block offsetmap_top_addresses_of_locals fundec =
    let f k offsm =
      let locals, r = offsetmap_top_addresses_of_locals offsm in
      let found_locals = not (Cvalue.V_Offsetmap.equal r offsm) in
      if found_locals then
        warn_locals_escape is_block fundec k locals;
      r
    in
    (fun (state:Cvalue.Model.t) ->
       (* let's forget relations *)
       let simple_state = state in
       let f base acc =
         try
           let offset_to_clean = Cvalue.Model.find_base base simple_state
           in
           let cleaned_offsetmap = f base offset_to_clean in
           Cvalue.Model.add_offsetmap base cleaned_offsetmap acc
         with Not_found -> acc
       in
       try
           (Location_Bits.Top_Param.fold
              f
              !bases_containing_locals
              (f Base.null simple_state))
       with Location_Bits.Top_Param.Error_Top ->
         begin
           let f k offsm acc =
             let locals, r = offsetmap_top_addresses_of_locals offsm in
             let found_locals = not (Cvalue.V_Offsetmap.equal r offsm) in
             if found_locals then
               warn_locals_escape is_block fundec k locals;
             Cvalue.Model.add_offsetmap k r acc
           in
           let result =
             try
                 (Cvalue.Model.fold_base_offsetmap
                    f
                    state
                    Cvalue.Model.empty_map)
             with Cvalue.Model.Error_Bottom -> Cvalue.Model.bottom
           in
           result
         end)