diff --git a/clangml-transforms/for_memcad.ml b/clangml-transforms/for_memcad.ml
index b75279242fc4188b3b289c1998d0f8129d05b080..a7c87dc5e0b22426582eeeb1dea32ff532099dd8 100644
--- a/clangml-transforms/for_memcad.ml
+++ b/clangml-transforms/for_memcad.ml
@@ -14,11 +14,15 @@ let fresh_var_name () =
   fresh_var_counter := index + 1;
   Printf.sprintf "__tmp_%d" index
 
+let identifier_name name : Clang.Ast.ident_ref =
+  { nested_name_specifier = None;
+    name = IdentifierName name }
+
 let declare_tmp qual_type =
   let tmp = fresh_var_name () in
   let decl_tmp = Clang.Ast.node ~qual_type (Clang.Ast.Decl [
     Clang.Ast.node ~qual_type (Clang.Ast.Var (Clang.Ast.var tmp qual_type))]) in
-  let tmp_var = Clang.Ast.node ~qual_type (Clang.Ast.DeclRef (Ident tmp)) in
+  let tmp_var = Clang.Ast.node ~qual_type (Clang.Ast.DeclRef (identifier_name tmp)) in
   tmp_var, decl_tmp
 
 let assign_to_tmp ?qual_type expr =
@@ -87,17 +91,17 @@ let close_node ((stmt, _stmts) as node) =
 let rec name_anonymous_fields (decl : Clang.Ast.decl list) =
   match decl with
   | [] -> []
-  | { desc = RecordDecl { keyword; name = ""; fields; bases; final }; _} as record ::
+  | { desc = RecordDecl ({ keyword; name = ""; _ } as record_decl); _} as record ::
     ({ desc = Field { name; qual_type = { desc =
-      Elaborated { keyword = keyword';
-        named_type = { desc = Record (Ident ""); _ } as named_type}; _}
+      Elaborated ({ keyword = keyword';
+        named_type = { desc = Record { name = IdentifierName ""; _ }; _ } as named_type; _ } as elaborated); _}
       as qual_type; bitwidth; init }; _} as field)
     :: tail when keyword = keyword' ->
     { record with
-      desc = Clang.Ast.RecordDecl { keyword; name = "anon"; fields; bases; final }} ::
+      desc = Clang.Ast.RecordDecl { record_decl with name = "anon" }} ::
     { field with desc = Field { name;  bitwidth; init;
-      qual_type = { qual_type with desc = Elaborated {
-      keyword; named_type = { named_type with desc = Record (Ident "anon") }}}}} ::
+      qual_type = { qual_type with desc = Elaborated { elaborated with
+      named_type = { named_type with desc = Record (identifier_name "anon") }}}}} ::
     name_anonymous_fields tail
   | hd :: tl -> hd :: name_anonymous_fields tl
 
@@ -173,7 +177,7 @@ let transform = object (self)
               Expr { stmt with desc = BinaryOperator {
                 lhs =
                   Clang.Ast.node ~qual_type:var_type
-                    (Clang.Ast.DeclRef (Ident var_name));
+                    (Clang.Ast.DeclRef (identifier_name var_name));
                 kind = Assign; rhs = init }}} in
             close_stmts init_stmts [decl; init]
         | { desc = Do { body; cond; _ }; _} ->
@@ -302,7 +306,7 @@ let transform = object (self)
 
   method! visit_Call env callee args =
     match callee, args with
-    | { desc = DeclRef (Ident "assert"); _ }, [cond] ->
+    | { desc = DeclRef { name = IdentifierName "assert"; _ }; _ }, [cond] ->
         let cond, cond_stmts =
           self#visit_expr { env with in_condition = true } cond in
         Call { callee; args = [cond] }, cond_stmts
diff --git a/visitors/clangml_visitors.ml b/visitors/clangml_visitors.ml
index ec4931465792e16a493e9be3c356a3e2f86e76a0..589b7420155cac56a6be653d1f64217c7c84432d 100644
--- a/visitors/clangml_visitors.ml
+++ b/visitors/clangml_visitors.ml
@@ -52,6 +52,10 @@
         Clang__.Clang__bindings.clang_ext_lambdacapturedefault [@opaque] [@@rewrite] [@@remove]
       type clang_ext_predefinedexpr_identkind =
         Clang__.Clang__bindings.clang_ext_predefinedexpr_identkind [@opaque] [@@rewrite] [@@remove]
+      type clang_ext_stringkind =
+        Clang__.Clang__bindings.clang_ext_stringkind [@opaque] [@@rewrite] [@@remove]
+      type clang_ext_overloadedoperatorkind =
+        Clang__.Clang__bindings.clang_ext_overloadedoperatorkind [@opaque] [@@rewrite] [@@remove]
     end
     module%import Clang__types = struct
       type language = language [@opaque] [@@rewrite] [@@remove]