let create_hidden_base
    validity_from_type ~hidden_var_name ~name_desc pointed_typ =
  let hidden_var =
    makeGlobalVar ~generated:false ~logic:true hidden_var_name pointed_typ
  in
  Globals.Vars.add_decl hidden_var;
  hidden_var.vdescr <- Some name_desc;
  let validity =
    if validity_from_type
    then begin
        match Base.validity_from_type hidden_var with
        | Base.Known (a,b)
            when not (Value_parameters.AllocatedContextValid.get ()) ->
            Base.Unknown (a,b)
        | (Base.All |  Base.Unknown _ | Base.Known _)  as s -> s
        | Base.Periodic _ -> assert false
      end
    else Base.Unknown (Int.zero,Bit_utils.max_bit_address ())
  in
  let hidden_base = Base.create_logic hidden_var validity
  in
  hidden_base