diff --git a/clangml-transforms/for_memcad.ml b/clangml-transforms/for_memcad.ml index 652359116b1f16e75981bfd26f4346e0d49b3da2..3ef65adc84cd3efc1fef99b89f0e49f4e12581cc 100644 --- a/clangml-transforms/for_memcad.ml +++ b/clangml-transforms/for_memcad.ml @@ -596,10 +596,17 @@ with type 'a Applicative.t = 'a Applicative.t = struct { record_decl with fields = name_anonymous_fields record_decl.fields }, Free_monoid.zero - let is_pointer_type (ty : Clang.Type.t) = - match ty.desc with - | Pointer _ -> true - | _ -> false + let is_array (expr : Clang.Expr.t) = + let cursor = Clang.Ast.cursor_of_node expr in + match Clang.ext_get_cursor_kind cursor with + | ImplicitCastExpr -> + let child = Option.get (Clang.first_child cursor) in + begin match Clang.get_type_kind (Clang.get_cursor_type child) with + | ConstantArray -> true + | _ -> false + end + | _ -> + false let hook : type a . a Refl.refl -> (a -> env -> a * accu) -> (a -> env -> a * accu) = @@ -632,7 +639,7 @@ with type 'a Applicative.t = 'a Applicative.t = struct | UnaryExpr { kind = SizeOf; argument } -> visit_unary_expr_size_of argument env | ArraySubscript { base; index } - when is_pointer_type (Clang.Type.of_node base) -> + when not (is_array base) -> let x' : Clang.Ast.expr_desc = UnaryOperator { kind = Deref; operand = { base with desc = BinaryOperator {