let dimension t =
  let rec flat k d = function
    | TNamed _ as t -> flat k d (Cil.unrollType t)
    | TArray(ty,Some e,_,_) -> flat (succ k) (Int64.mul d (constant e)) ty
    | te -> k , d , te
  in flat 1 Int64.one t