let rec value_of_bits t bits : Data.value = match t with
| Ctypes.C_int c_int ->
let c_val = z_from_bits bits (format_of_c_int_type c_int) in
V_int (c_int, c_val)
| Ctypes.C_float c_float ->
let ft = format_of_c_float_type c_float in
let c_val = real_from_bits bits ft in
V_float (c_float, c_val)
| Ctypes.C_comp comp ->
let ft = format_of_compinfo comp in
let c_val = RtLib.from_bits bits ft in
V_record (comp, F.unwrap c_val)
| Ctypes.C_array arr ->
let ft = format_of_array arr in
let c_val = RtLib.from_bits bits ft in
let logic_val = (F.unwrap c_val) in
V_array (arr, F.unwrap logic_val)
| Ctypes.C_pointer ty ->
let c_val = z_from_bits bits (format_of_addr ty) in
let addr = Tint.xaddr_of_integer c_val in
V_pointer (ty, addr)