let rec basename = function
  | C_int i -> Pretty_utils.sfprintf "%a" pp_int i
  | C_float f -> Pretty_utils.sfprintf "%a" pp_float f
  | C_pointer _ -> "pointer"
  | C_comp c -> c.cname
  | C_array a ->
      let te = basename (object_of a.arr_element) in
      match a.arr_flat with
        | None -> te ^ "_array"
        | Some f -> te ^ "_" ^ Int64.to_string f.arr_size