method new_wrapper_for_type ty =
    (* Currently, do not make any difference between a pointer to const T
     * or volatile T and a pointer to T.
     *)

    let ty = typeRemoveAttributes ["const";"volatile"] (unrollType ty) in
    try
      TypeHashtbl.find type_wrappers ty
    with Not_found ->
      (* Construct a new wrapper for this type *)
      let wrapper_def,wrapper_type = new_wrapper_for_type_no_sharing ty in
      TypeHashtbl.replace type_wrappers ty wrapper_type;
      auto_type_wrappers := TypeSet.add wrapper_type !auto_type_wrappers;
      (* Treat newly constructed type *)
      let store_current_global = !currentGlobal in
      ignore (visitFramacGlobal (self:>frama_c_visitor) wrapper_def);
      currentGlobal := store_current_global;
      (* Return the wrapper type *)
      wrapper_type