let coerce_implicit_pointer (exp : expr) =
  let ty = (type_of exp) in
  match ty.ct_ty with
    Tbuiltin _ | Tpointer _ | Tvoid -> exp
  | Tfunction _ ->
      make_expr_t (CTTexpAddress(exp)) (make_c_type (Tpointer ty)) ~orig:exp
  | Tarray(ety,sz) ->
      let ty = make_c_type (Tpointer ety) in
      make_expr_t (CTTexpCoerce(ty,exp)) ty ~orig:exp
  | Tstruct _ -> exp