diff --git a/examples/cpp/method/example_generated.rs b/examples/cpp/method/example_generated.rs
index 9e8d3e3..3577bc1 100644
--- a/examples/cpp/method/example_generated.rs
+++ b/examples/cpp/method/example_generated.rs
@@ -33,19 +33,19 @@
     // Generated from: examples/cpp/method/example.h;l=12
     // Error while generating bindings for function 'Bar::Bar':
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::foo::Bar
-    // Expected first parameter to be a `__this` reference, found *mut crate::foo::Bar
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::foo::Bar
 
     // Generated from: examples/cpp/method/example.h;l=12
     // Error while generating bindings for function 'Bar::Bar':
     // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::foo::Bar
-    // Expected first parameter to be a `__this` reference, found *mut crate::foo::Bar
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::foo::Bar
 
     // Generated from: examples/cpp/method/example.h;l=12
     // Error while generating bindings for function 'Bar::Bar':
     // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::foo::Bar
-    // Expected first parameter to be a `__this` reference, found *mut crate::foo::Bar
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::foo::Bar
 
     // Generated from: examples/cpp/method/example.h;l=12
     // Error while generating bindings for function 'Bar::operator=':
diff --git a/examples/cpp/trivial_abi_struct/example_generated.rs b/examples/cpp/trivial_abi_struct/example_generated.rs
index 388849c..36c4ff3 100644
--- a/examples/cpp/trivial_abi_struct/example_generated.rs
+++ b/examples/cpp/trivial_abi_struct/example_generated.rs
@@ -36,13 +36,13 @@
 // Generated from: examples/cpp/trivial_abi_struct/example.h;l=12
 // Error while generating bindings for function 'Position::Position':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Position
-// Expected first parameter to be a `__this` reference, found *mut crate::Position
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Position
 
 // Generated from: examples/cpp/trivial_abi_struct/example.h;l=12
 // Error while generating bindings for function 'Position::Position':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Position
-// Expected first parameter to be a `__this` reference, found *mut crate::Position
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Position
 
 // Generated from: examples/cpp/trivial_abi_struct/example.h;l=12
 // Error while generating bindings for function 'Position::operator=':
diff --git a/examples/cpp/trivial_struct/example_generated.rs b/examples/cpp/trivial_struct/example_generated.rs
index af76f29..513a1af 100644
--- a/examples/cpp/trivial_struct/example_generated.rs
+++ b/examples/cpp/trivial_struct/example_generated.rs
@@ -33,19 +33,19 @@
 // Generated from: examples/cpp/trivial_struct/example.h;l=8
 // Error while generating bindings for function 'Position::Position':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Position
-// Expected first parameter to be a `__this` reference, found *mut crate::Position
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Position
 
 // Generated from: examples/cpp/trivial_struct/example.h;l=8
 // Error while generating bindings for function 'Position::Position':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Position
-// Expected first parameter to be a `__this` reference, found *mut crate::Position
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Position
 
 // Generated from: examples/cpp/trivial_struct/example.h;l=8
 // Error while generating bindings for function 'Position::Position':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Position
-// Expected first parameter to be a `__this` reference, found *mut crate::Position
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Position
 
 // Generated from: examples/cpp/trivial_struct/example.h;l=8
 // Error while generating bindings for function 'Position::operator=':
diff --git a/rs_bindings_from_cc/generate_bindings/database/function_types.rs b/rs_bindings_from_cc/generate_bindings/database/function_types.rs
index 7543837..531e447 100644
--- a/rs_bindings_from_cc/generate_bindings/database/function_types.rs
+++ b/rs_bindings_from_cc/generate_bindings/database/function_types.rs
@@ -142,6 +142,9 @@
         /// Whether to format the first parameter as "self" (e.g. `__this:
         /// &mut T` -> `&mut self`)
         format_first_param_as_self: bool,
+        /// Whether this function wraps a C++ constructor for an `Unpin` type, so it has an implicit
+        /// `out: *mut Self` parameter.
+        is_renamed_unpin_constructor: bool,
     },
     /// Used for trait methods for which we need an `impl TraitName for
     /// SomeStruct { ... }` block.
diff --git a/rs_bindings_from_cc/generate_bindings/generate_function.rs b/rs_bindings_from_cc/generate_bindings/generate_function.rs
index b0efb40..e56d355 100644
--- a/rs_bindings_from_cc/generate_bindings/generate_function.rs
+++ b/rs_bindings_from_cc/generate_bindings/generate_function.rs
@@ -370,7 +370,12 @@
     let (record, _) = extract_first_operator_parameter(db, param_type, errors)?;
     Ok((
         make_rs_ident("unary_plus"),
-        ImplKind::Struct { is_unsafe: false, record, format_first_param_as_self: true },
+        ImplKind::Struct {
+            is_unsafe: false,
+            record,
+            format_first_param_as_self: true,
+            is_renamed_unpin_constructor: false,
+        },
     ))
 }
 
@@ -580,7 +585,16 @@
     } else {
         false
     };
-    (func_name, ImplKind::Struct { record: record.clone(), format_first_param_as_self, is_unsafe })
+    let is_renamed_unpin_constructor = func.cc_name.is_constructor() && record.is_unpin();
+    (
+        func_name,
+        ImplKind::Struct {
+            record: record.clone(),
+            format_first_param_as_self,
+            is_renamed_unpin_constructor,
+            is_unsafe,
+        },
+    )
 }
 
 fn api_func_shape_for_destructor(
@@ -792,7 +806,16 @@
 
     let is_unsafe = match func.safety_annotation {
         SafetyAnnotation::Unannotated => {
-            param_types.iter().any(|p| db.is_rs_type_kind_unsafe(p.clone()))
+            let mut params_iter = param_types.iter();
+            let has_unsafe_self = func.cc_name.is_constructor()
+                && params_iter
+                    .next()
+                    .map(|this_arg| {
+                        let Some(self_type) = this_arg.referent() else { return false };
+                        db.is_rs_type_kind_unsafe(self_type.clone())
+                    })
+                    .unwrap_or(false);
+            has_unsafe_self || params_iter.any(|p| db.is_rs_type_kind_unsafe(p.clone()))
         }
         SafetyAnnotation::Unsafe => true,
         SafetyAnnotation::DisableUnsafe => false,
@@ -981,7 +1004,8 @@
 
     match &impl_kind {
         ImplKind::Trait { trait_name: TraitName::UnpinConstructor { .. }, .. }
-        | ImplKind::Trait { trait_name: TraitName::Clone, .. } => {
+        | ImplKind::Trait { trait_name: TraitName::Clone, .. }
+        | ImplKind::Struct { is_renamed_unpin_constructor: true, .. } => {
             // SAFETY: A user-defined constructor is not guaranteed to
             // initialize all the fields. To make the `assume_init()` call
             // below safe, the memory is zero-initialized first. This is a
@@ -994,7 +1018,7 @@
                 #thunk_prepare
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    #crate_root_path::detail::#thunk_ident( &raw mut tmp as *mut ::core::ffi::c_void #( , #thunk_args )* );
+                    #crate_root_path::detail::#thunk_ident( &raw mut tmp as *mut _ #( , #thunk_args )* );
                     tmp.assume_init()
                 }
             })
@@ -1778,6 +1802,21 @@
     let mut lifetimes: Vec<Lifetime> = unique_lifetimes(&*param_types).collect();
 
     let mut quoted_return_type = None;
+
+    if let ImplKind::Struct { is_renamed_unpin_constructor: true, .. } = impl_kind {
+        move_self_from_out_param_to_return_value(
+            db,
+            func,
+            return_type,
+            &mut api_params,
+            &mut thunk_args,
+            param_types,
+            &mut lifetimes,
+            /*allow_missing_this_lifetime=*/ true,
+        )?;
+        quoted_return_type = Some(quote! { Self });
+    }
+
     // TODO: b/389131731 - Unify adjustment of return and parameter types.
     let trait_name = match &impl_kind {
         ImplKind::Trait { trait_name, .. } => Some(trait_name),
@@ -1794,51 +1833,17 @@
             }
         }
         Some(TraitName::UnpinConstructor { .. } | TraitName::CtorNew(..) | TraitName::Clone) => {
-            // For constructors, we move the output parameter to be the return value.
-            // The return value is "really" void.
-            assert!(
-                func.return_type.is_unit_type(),
-                "Unexpectedly non-void return type of a constructor: {func:?}"
-            );
-
-            //  Presence of element #0 is indirectly verified by a `Constructor`-related
-            // `match` branch a little bit above.
-            *return_type = param_types[0]
-                .referent()
-                .ok_or_else(|| {
-                    anyhow!(
-                        "Expected pointer/reference for `__this` parameter, found {}",
-                        param_types[0].display(db)
-                    )
-                })?
-                .clone();
-            quoted_return_type = Some(quote! {Self});
-
-            // Grab the `__this` lifetime to remove it from the lifetime parameters.
-            let this_lifetime = param_types[0].lifetime().ok_or_else(|| {
-                anyhow!(
-                    "Expected first parameter to be a `__this` reference, found {}",
-                    param_types[0].display(db)
-                )
-            })?;
-
-            // Drop `__this` parameter from the public Rust API.
-            api_params.remove(0);
-            thunk_args.remove(0);
-            param_types.remove(0);
-
-            // Remove the lifetime associated with `__this`.
-            lifetimes.retain(|l| l != &this_lifetime);
-            if let Some(type_still_dependent_on_removed_lifetime) = param_types
-                .iter()
-                .find(|t| t.lifetimes().filter(|lt| !lt.is_elided()).any(|lt| lt == this_lifetime))
-            {
-                bail!(
-                    "The lifetime of `__this` is unexpectedly also used by another \
-                    parameter: {}",
-                    type_still_dependent_on_removed_lifetime.display(db)
-                );
-            }
+            move_self_from_out_param_to_return_value(
+                db,
+                func,
+                return_type,
+                &mut api_params,
+                &mut thunk_args,
+                param_types,
+                &mut lifetimes,
+                /*allow_missing_this_lifetime=*/ false,
+            )?;
+            quoted_return_type = Some(quote! { Self });
 
             // CtorNew groups parameters into a tuple.
             if let Some(TraitName::CtorNew(args_type)) = trait_name {
@@ -1959,6 +1964,69 @@
     })
 }
 
+fn move_self_from_out_param_to_return_value(
+    db: &dyn BindingsGenerator,
+    func: &Func,
+    return_type: &mut RsTypeKind,
+    api_params: &mut Vec<TokenStream>,
+    thunk_args: &mut Vec<TokenStream>,
+    param_types: &mut Vec<RsTypeKind>,
+    lifetimes: &mut Vec<Lifetime>,
+    allow_missing_this_lifetime: bool,
+) -> Result<()> {
+    // For constructors, we move the output parameter to be the return value.
+    // The return value is "really" void.
+    assert!(
+        func.return_type.is_unit_type(),
+        "Unexpectedly non-void return type of a constructor: {func:?}"
+    );
+
+    //  Presence of element #0 is indirectly verified by a `Constructor`-related
+    // `match` branch a little bit above.
+    *return_type = param_types[0]
+        .referent()
+        .ok_or_else(|| {
+            anyhow!(
+                "Expected pointer/reference for `__this` parameter, found {}",
+                param_types[0].display(db)
+            )
+        })?
+        .clone();
+
+    // Grab the `__this` lifetime to remove it from the lifetime parameters.
+    let this_lifetime = param_types[0].lifetime();
+
+    // HACK: this prevents generation of uncallable bindings prior to stabilization of
+    // inferred lifetimes, and should be removed once InferOperatorLifetimes is enabled by default.
+    if this_lifetime.is_none() && !allow_missing_this_lifetime {
+        bail!(
+            "Expected first reference parameter `__this` to have a lifetime, found {}",
+            param_types[0].display(db)
+        )
+    }
+
+    // Drop `__this` parameter from the public Rust API.
+    api_params.remove(0);
+    thunk_args.remove(0);
+    param_types.remove(0);
+
+    // Remove the lifetime associated with `__this`.
+    if let Some(this_lifetime) = this_lifetime {
+        lifetimes.retain(|l| l != &this_lifetime);
+        if let Some(type_still_dependent_on_removed_lifetime) = param_types
+            .iter()
+            .find(|t| t.lifetimes().filter(|lt| !lt.is_elided()).any(|lt| lt == this_lifetime))
+        {
+            bail!(
+                "The lifetime of `__this` is unexpectedly also used by another \
+            parameter: {}",
+                type_still_dependent_on_removed_lifetime.display(db)
+            );
+        }
+    }
+    Ok(())
+}
+
 /// Formats singletons as themselves, and collections of n!=1 items as a tuple.
 ///
 /// In other words, this formats a collection of things as if via `#(#items),*`,
diff --git a/rs_bindings_from_cc/generate_bindings/generate_function_test.rs b/rs_bindings_from_cc/generate_bindings/generate_function_test.rs
index 641ce69..0255c15 100644
--- a/rs_bindings_from_cc/generate_bindings/generate_function_test.rs
+++ b/rs_bindings_from_cc/generate_bindings/generate_function_test.rs
@@ -381,7 +381,7 @@
                 fn default() -> Self {
                     let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                     unsafe {
-                        crate::detail::__rust_thunk___ZN20DefaultedConstructorC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+                        crate::detail::__rust_thunk___ZN20DefaultedConstructorC1Ev(&raw mut tmp as *mut _);
                         tmp.assume_init()
                     }
                 }
@@ -485,7 +485,7 @@
                     fn from(i: ::core::ffi::c_int) -> Self {
                         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                         unsafe {
-                            crate::detail::__rust_thunk___ZN10SomeStructC1Ei(&raw mut tmp as *mut ::core::ffi::c_void, i);
+                            crate::detail::__rust_thunk___ZN10SomeStructC1Ei(&raw mut tmp as *mut _, i);
                             tmp.assume_init()
                         }
                     }
@@ -518,7 +518,7 @@
                     let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                     unsafe {
                         crate::detail::__rust_thunk___ZN15StructUnderTestC1ERK15SomeOtherStruct(
-                            &raw mut tmp as *mut ::core::ffi::c_void, other);
+                            &raw mut tmp as *mut _, other);
                         tmp.assume_init()
                     }
                 }
@@ -1682,7 +1682,7 @@
                     let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                     unsafe {
                         crate::detail::__rust_thunk___ZN7TrivialC1E10Nontrivial(
-                            &raw mut tmp as *mut ::core::ffi::c_void,
+                            &raw mut tmp as *mut _,
                             __param_0
                         );
                         tmp.assume_init()
diff --git a/rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs b/rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs
index eea7dbe..bb279fd 100644
--- a/rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs
+++ b/rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs
@@ -414,7 +414,7 @@
         return_type_cpp_spelling.clone()
     };
 
-    let this_ref_qualification =
+    let mut this_ref_qualification =
         func.member_func_metadata.as_ref().and_then(|meta| match &func.rs_name {
             UnqualifiedIdentifier::Constructor | UnqualifiedIdentifier::Destructor => None,
             UnqualifiedIdentifier::Identifier(_) | UnqualifiedIdentifier::Operator(_) => meta
@@ -422,6 +422,9 @@
                 .as_ref()
                 .map(|instance_method| instance_method.reference),
         });
+    if func.cc_name.is_constructor() {
+        this_ref_qualification = None;
+    }
     let (implementation_function, arg_expressions) =
         if let Some(this_ref_qualification) = this_ref_qualification {
             let this_param = func
diff --git a/rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs b/rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs
index 1c7d761..5382e7c 100644
--- a/rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs
+++ b/rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs
@@ -78,7 +78,7 @@
 }
 
 fn make_rs_field_ident(field: &Field, field_index: usize) -> Ident {
-    match field.identifier.as_ref() {
+    match field.rust_identifier.as_ref() {
         None => make_rs_ident(&format!("__unnamed_field{}", field_index)),
         Some(Identifier { identifier }) => make_rs_ident(identifier),
     }
@@ -401,7 +401,7 @@
                     }
                 },
                 description: vec![BitfieldComment {
-                    field_name: field.identifier.as_ref().map(|i| i.identifier.clone()),
+                    field_name: field.rust_identifier.as_ref().map(|i| i.identifier.clone()),
                     bits: size,
                 }],
             })
@@ -740,7 +740,8 @@
             // bitfields have been filtered out earlier.
             assert_eq!(field.offset % 8, 0);
             let expected_offset = field.offset / 8;
-            let field_ident = expect_format_cc_type_name(&field.identifier.as_ref()?.identifier);
+            let field_ident =
+                expect_format_cc_type_name(&field.cpp_identifier.as_ref()?.identifier);
             Some((field_ident, expected_offset))
         })
         .collect();
@@ -799,7 +800,7 @@
             },
             field: make_rs_ident(
                 &field
-                    .identifier
+                    .rust_identifier
                     .as_ref()
                     .expect("Unnamed fields can't be annotated with [[no_unique_address]]")
                     .identifier,
diff --git a/rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs b/rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs
index 9ffeba4..4ab2ded 100644
--- a/rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs
+++ b/rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs
@@ -1356,7 +1356,7 @@
                 fn default() -> Self {
                     let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                     unsafe {
-                        crate::detail::__rust_thunk___ZN28UnionWithDefaultConstructorsC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+                        crate::detail::__rust_thunk___ZN28UnionWithDefaultConstructorsC1Ev(&raw mut tmp as *mut _);
                         tmp.assume_init()
                     }
                 }
diff --git a/rs_bindings_from_cc/importers/cxx_record.cc b/rs_bindings_from_cc/importers/cxx_record.cc
index a1da816..1b13d8a 100644
--- a/rs_bindings_from_cc/importers/cxx_record.cc
+++ b/rs_bindings_from_cc/importers/cxx_record.cc
@@ -325,6 +325,13 @@
   return GetExprAsBool(*args->front(), decl.getASTContext());
 }
 
+std::optional<Identifier> StringRefToOptionalIdentifier(llvm::StringRef name) {
+  if (name.empty()) {
+    return std::nullopt;
+  }
+  return Identifier(std::string(name));
+}
+
 }  // namespace
 
 std::optional<Identifier> CXXRecordDeclImporter::GetTranslatedFieldName(
@@ -761,7 +768,8 @@
     }
 
     fields.push_back(
-        {.identifier = GetTranslatedFieldName(field_decl),
+        {.rust_identifier = GetTranslatedFieldName(field_decl),
+         .cpp_identifier = StringRefToOptionalIdentifier(field_decl->getName()),
          .doc_comment = ictx_.GetComment(field_decl),
          .type = std::move(type),
          .access = TranslateAccessSpecifier(access),
diff --git a/rs_bindings_from_cc/ir.cc b/rs_bindings_from_cc/ir.cc
index 01b4cf0..f815f79 100644
--- a/rs_bindings_from_cc/ir.cc
+++ b/rs_bindings_from_cc/ir.cc
@@ -364,7 +364,8 @@
 
 llvm::json::Value Field::ToJson() const {
   return llvm::json::Object{
-      {"identifier", identifier},
+      {"rust_identifier", rust_identifier},
+      {"cpp_identifier", cpp_identifier},
       {"doc_comment", doc_comment},
       {"type", type},
       {"access", AccessToString(access)},
diff --git a/rs_bindings_from_cc/ir.h b/rs_bindings_from_cc/ir.h
index f8162d6..1144d26 100644
--- a/rs_bindings_from_cc/ir.h
+++ b/rs_bindings_from_cc/ir.h
@@ -425,7 +425,8 @@
   // Name of the field.  This may be missing for "unnamed members" - see:
   // - https://en.cppreference.com/w/c/language/struct
   // - https://rust-lang.github.io/rfcs/2102-unnamed-fields.html
-  std::optional<Identifier> identifier;
+  std::optional<Identifier> rust_identifier;
+  std::optional<Identifier> cpp_identifier;
 
   std::optional<std::string> doc_comment;
   absl::StatusOr<CcType> type;
diff --git a/rs_bindings_from_cc/ir.rs b/rs_bindings_from_cc/ir.rs
index 914a4d2..d3ba852 100644
--- a/rs_bindings_from_cc/ir.rs
+++ b/rs_bindings_from_cc/ir.rs
@@ -434,6 +434,12 @@
     pub identifier: Rc<str>,
 }
 
+impl Identifier {
+    pub fn as_str(&self) -> &str {
+        &self.identifier
+    }
+}
+
 impl Display for Identifier {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         write!(f, "{}", self.identifier)
@@ -619,12 +625,27 @@
 }
 
 impl UnqualifiedIdentifier {
-    pub fn identifier_as_str(&self) -> Option<&str> {
+    pub fn is_constructor(&self) -> bool {
+        matches!(self, UnqualifiedIdentifier::Constructor)
+    }
+    pub fn is_destructor(&self) -> bool {
+        matches!(self, UnqualifiedIdentifier::Destructor)
+    }
+    pub fn as_identifier(&self) -> Option<&Identifier> {
         match self {
-            UnqualifiedIdentifier::Identifier(identifier) => Some(identifier.identifier.as_ref()),
+            UnqualifiedIdentifier::Identifier(identifier) => Some(identifier),
             _ => None,
         }
     }
+    pub fn as_operator(&self) -> Option<&Operator> {
+        match self {
+            UnqualifiedIdentifier::Operator(op) => Some(op),
+            _ => None,
+        }
+    }
+    pub fn identifier_as_str(&self) -> Option<&str> {
+        self.as_identifier().map(|id| id.identifier.as_ref())
+    }
 }
 
 impl Debug for UnqualifiedIdentifier {
@@ -811,7 +832,8 @@
 #[derive(Debug, PartialEq, Eq, Hash, Clone, Deserialize)]
 #[serde(deny_unknown_fields)]
 pub struct Field {
-    pub identifier: Option<Identifier>,
+    pub rust_identifier: Option<Identifier>,
+    pub cpp_identifier: Option<Identifier>,
     pub doc_comment: Option<Rc<str>>,
     #[serde(rename(deserialize = "type"))]
     pub type_: Result<CcType, String>,
diff --git a/rs_bindings_from_cc/ir_from_cc_test.rs b/rs_bindings_from_cc/ir_from_cc_test.rs
index 09b15cc..2578c29 100644
--- a/rs_bindings_from_cc/ir_from_cc_test.rs
+++ b/rs_bindings_from_cc/ir_from_cc_test.rs
@@ -215,20 +215,11 @@
 #[gtest]
 fn test_unescapable_rust_keywords_in_field_name() {
     let ir = ir_from_cc("struct SomeStruct { int self; };").unwrap();
-    assert_ir_matches!(
-        ir,
-        quote! {
-           Record {
-               rs_name: "SomeStruct",
-               cc_name: "SomeStruct",
-               ...
-               fields: [Field {
-                   identifier: Some("__field_0"), ...
-               }],
-               ...
-           }
-        }
-    );
+    let record = ir.records().find(|record| record.rs_name == "SomeStruct").unwrap();
+    assert_eq!(record.fields.len(), 1);
+    let field = &record.fields[0];
+    assert_eq!(field.rust_identifier.as_ref().map(|x| x.as_str()), Some("__field_0"));
+    assert_eq!(field.cpp_identifier.as_ref().map(|x| x.as_str()), Some("self"));
 }
 
 #[gtest]
@@ -384,19 +375,19 @@
                 rs_name: "SomeStruct", ...
                 fields: [
                     Field {
-                        identifier: Some("default_access_int") ...
+                        rust_identifier: Some("default_access_int") ...
                         access: Public ...
                     },
                     Field {
-                        identifier: Some("public_int") ...
+                        rust_identifier: Some("public_int") ...
                         access: Public ...
                     },
                     Field {
-                        identifier: Some("protected_int") ...
+                        rust_identifier: Some("protected_int") ...
                         access: Protected ...
                     },
                     Field {
-                        identifier: Some("private_int") ...
+                        rust_identifier: Some("private_int") ...
                         access: Private ...
                     },
                 ] ...
@@ -410,7 +401,7 @@
                 rs_name: "SomeClass", ...
                 fields: [
                     Field {
-                        identifier: Some("default_access_int") ...
+                        rust_identifier: Some("default_access_int") ...
                         access: Private ...
                     }
                 ] ...
@@ -439,28 +430,28 @@
                 rs_name: "Bitfields", ...
                 fields: [
                        Field {
-                           identifier: Some("b1"), ...
+                           rust_identifier: Some("b1"), ...
                            type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                            offset: 0,
                            size: 1, ...
                            is_bitfield: true, ...
                        },
                        Field {
-                           identifier: Some("b2"), ...
+                           rust_identifier: Some("b2"), ...
                            type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                            offset: 1,
                            size: 2, ...
                            is_bitfield: true, ...
                        },
                        Field {
-                           identifier: Some("b3"), ...
+                           rust_identifier: Some("b3"), ...
                            type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                            offset: 3,
                            size: 13, ...
                            is_bitfield: true, ...
                        },
                        Field {
-                           identifier: Some("b4"), ...
+                           rust_identifier: Some("b4"), ...
                            type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                            offset: 16,
                            size: 14, ...
@@ -537,8 +528,8 @@
             Record {
                 rs_name: "WithUnnamedFields", ...
                 fields: [
-                    Field { identifier: Some("foo") ... },
-                    Field { identifier: None ... },
+                    Field { rust_identifier: Some("foo") ... },
+                    Field { rust_identifier: None ... },
                 ] ...
             }
         }
@@ -678,12 +669,12 @@
                 cc_name: "StructWithUnnamedMembers" ...
                 fields: [
                     Field {
-                        identifier: None, ...
+                        rust_identifier: None, ...
                         type_ : Err(...), ...
                         offset: 0, ...
                     } ...
                     Field {
-                        identifier: None, ...
+                        rust_identifier: None, ...
                         type_ : Err(...), ...
                         offset: 64, ...
                     } ...
@@ -807,7 +798,7 @@
         ir,
         quote! {
             Field {
-                identifier: Some("ptr") ...
+                rust_identifier: Some("ptr") ...
                 type_: Ok(CcType {
                     variant: Pointer(PointerType {
                         kind: Nullable,
@@ -1085,7 +1076,7 @@
             owning_target: BazelLabel("//test:testing_target"), ...
             doc_comment: Some("Doc comment of MyStruct template."), ...
             fields: [Field {
-                identifier: Some("value"), ...
+                rust_identifier: Some("value"), ...
                 doc_comment: Some("Doc comment of `value` field."), ...
                 type_: Ok(CcType { variant: Primitive(Int), ... }),
                 access: Public,
@@ -1183,7 +1174,7 @@
             defining_target: Some(BazelLabel("//test:testing_target")), ...
             doc_comment: Some("Doc comment for template specialization for T=int."), ...
             fields: [Field {
-                identifier: Some("value"), ...
+                rust_identifier: Some("value"), ...
                 doc_comment: Some("Doc comment of the `value` field specialization for T=int."), ...
                 type_: Ok(CcType { variant: Primitive(Int), ... }),
                 access: Public,
@@ -1399,7 +1390,7 @@
           Record {
             rs_name: "__CcTemplateInst10MyTemplateIiE", ...
             cc_name: "MyTemplate<int>", ...
-            fields: [Field { identifier: Some("field"), ... }], ...
+            fields: [Field { rust_identifier: Some("field"), ... }], ...
           }
         }
     );
@@ -1432,7 +1423,7 @@
           Record {
             rs_name: "__CcTemplateInst10MyTemplateIiE", ...
             cc_name: "MyTemplate<int>", ...
-            fields: [Field { identifier: Some("field"), ... }], ...
+            fields: [Field { rust_identifier: Some("field"), ... }], ...
           }
         }
     );
@@ -1614,7 +1605,7 @@
                    cc_name: "MyStruct", ...
                    owning_target: BazelLabel("//test:testing_target"), ...
                    fields: [Field {
-                       identifier: Some("public_field"), ...
+                       rust_identifier: Some("public_field"), ...
                        type_: Ok(CcType {
                            variant: Record(ItemId(#record_id)), ...
                        }),
@@ -1657,7 +1648,7 @@
                    cc_name: "MyStruct", ...
                    owning_target: BazelLabel("//test:testing_target"), ...
                    fields: [Field {
-                       identifier: Some("private_field_"), ...
+                       rust_identifier: Some("private_field_"), ...
                        type_: Err("Types of non-public C++ fields can be elided away"), ...
                        access: Private,
                        offset: 0,
@@ -2218,7 +2209,8 @@
                cc_name: "StructWithUnsupportedField",
                ...
                fields: [Field {
-                   identifier: Some("my_field"),
+                   rust_identifier: Some("my_field"),
+                   cpp_identifier: Some("my_field"),
                    doc_comment: Some("Doc comment for `my_field`."),
                    type_: Err(
                        "Unsupported type 'struct Packed': No generated bindings found for 'Packed'",
@@ -2289,7 +2281,7 @@
               bridge_type: None, ...
               unambiguous_public_bases: [],
               fields: [Field {
-                  identifier: Some("derived_field"), ...
+                  rust_identifier: Some("derived_field"), ...
                   offset: 32, ...
               }], ...
               size_align: SizeAlign {
@@ -2404,14 +2396,14 @@
                 mangled_cc_name: "10SomeStruct" ...
                 fields: [
                     Field {
-                        identifier: Some("first_field"), ...
+                        rust_identifier: Some("first_field"), ...
                         type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                         offset: 0, ...
                         size: 32, ...
                         is_bitfield: false, ...
                     },
                     Field {
-                        identifier: Some("second_field"), ...
+                        rust_identifier: Some("second_field"), ...
                         type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                         offset: 32, ...
                         size: 32, ...
@@ -2502,14 +2494,14 @@
                 cc_name: "SomeUnion" ...
                 fields: [
                     Field {
-                        identifier: Some("first_field"), ...
+                        rust_identifier: Some("first_field"), ...
                         type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                         offset: 0, ...
                         size: 32, ...
                         is_bitfield: false, ...
                     },
                     Field {
-                        identifier: Some("second_field"), ...
+                        rust_identifier: Some("second_field"), ...
                         type_: Ok(CcType { variant: Primitive(Int), ... }), ...
                         offset: 0, ...
                         size: 32, ...
@@ -2544,12 +2536,12 @@
                 rs_name: "MyUnion"...
                 fields: [
                   Field {
-                    identifier: Some("first_field") ...
+                    rust_identifier: Some("first_field") ...
                     offset: 0 ...
                     size: 448 ...
                   },
                   Field {
-                    identifier: Some("second_field") ...
+                    rust_identifier: Some("second_field") ...
                     offset: 0 ...
                     size: 32 ...
                   } ...
diff --git a/rs_bindings_from_cc/test/annotations/BUILD b/rs_bindings_from_cc/test/annotations/BUILD
index a876599..4b5aeb9 100644
--- a/rs_bindings_from_cc/test/annotations/BUILD
+++ b/rs_bindings_from_cc/test/annotations/BUILD
@@ -8,23 +8,6 @@
 package(default_applicable_licenses = ["//:license"])
 
 crubit_test_cc_library(
-    name = "must_bind",
-    hdrs = ["must_bind.h"],
-    deps = [
-        "//support:annotations",
-        "//support/internal:bindings_support",
-    ],
-)
-
-crubit_rust_test(
-    name = "must_bind_test",
-    srcs = ["must_bind_test.rs"],
-    cc_deps = [
-        ":must_bind",
-    ],
-)
-
-crubit_test_cc_library(
     name = "do_not_bind",
     hdrs = ["do_not_bind.h"],
     deps = [
@@ -51,3 +34,48 @@
         "@crate_index//:googletest",
     ],
 )
+
+crubit_test_cc_library(
+    name = "must_bind",
+    hdrs = ["must_bind.h"],
+    deps = [
+        "//support:annotations",
+        "//support/internal:bindings_support",
+    ],
+)
+
+crubit_rust_test(
+    name = "must_bind_test",
+    srcs = ["must_bind_test.rs"],
+    cc_deps = [
+        ":must_bind",
+    ],
+)
+
+crubit_test_cc_library(
+    name = "rust_name",
+    hdrs = ["rust_name.h"],
+    deps = [
+        "//support:annotations",
+        "//support/internal:bindings_support",
+    ],
+)
+
+golden_test(
+    name = "rust_name_golden_test",
+    basename = "rust_name",
+    cc_library = "rust_name",
+    golden_cc = "rust_name_api_impl.cc",
+    golden_rs = "rust_name_rs_api.rs",
+)
+
+crubit_rust_test(
+    name = "rust_name_test",
+    srcs = ["rust_name_test.rs"],
+    cc_deps = [
+        ":rust_name",
+    ],
+    deps = [
+        "@crate_index//:googletest",
+    ],
+)
diff --git a/rs_bindings_from_cc/test/annotations/do_not_bind_rs_api.rs b/rs_bindings_from_cc/test/annotations/do_not_bind_rs_api.rs
index 85dd496..0b53ccd 100644
--- a/rs_bindings_from_cc/test/annotations/do_not_bind_rs_api.rs
+++ b/rs_bindings_from_cc/test/annotations/do_not_bind_rs_api.rs
@@ -42,7 +42,7 @@
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
                     crate::detail::__rust_thunk___ZN6crubit4test23ArgumentToBoundOverloadC1Ev(
-                        &raw mut tmp as *mut ::core::ffi::c_void,
+                        &raw mut tmp as *mut _,
                     );
                     tmp.assume_init()
                 }
@@ -74,7 +74,7 @@
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
                     crate::detail::__rust_thunk___ZN6crubit4test25ArgumentToUnboundOverloadC1Ev(
-                        &raw mut tmp as *mut ::core::ffi::c_void,
+                        &raw mut tmp as *mut _,
                     );
                     tmp.assume_init()
                 }
@@ -117,7 +117,7 @@
             fn from(mut __param_0: crate::crubit::test::ArgumentToBoundOverload) -> Self {
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    crate::detail::__rust_thunk___ZN6crubit4test30StructWithDoNotBindConstructorC1ENS0_23ArgumentToBoundOverloadE(&raw mut tmp as*mut::core::ffi::c_void,&mut __param_0);
+                    crate::detail::__rust_thunk___ZN6crubit4test30StructWithDoNotBindConstructorC1ENS0_23ArgumentToBoundOverloadE(&raw mut tmp as*mut _,&mut __param_0);
                     tmp.assume_init()
                 }
             }
@@ -158,7 +158,7 @@
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
                     crate::detail::__rust_thunk___ZN6crubit4test25StructWithDoNotBindMethodC1Ev(
-                        &raw mut tmp as *mut ::core::ffi::c_void,
+                        &raw mut tmp as *mut _,
                     );
                     tmp.assume_init()
                 }
@@ -200,7 +200,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb0EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3ado_5fnot_5fbind(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb0EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3ado_5fnot_5fbind(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -248,7 +248,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb1EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3ado_5fnot_5fbind(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb1EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3ado_5fnot_5fbind(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/annotations/rust_name.h b/rs_bindings_from_cc/test/annotations/rust_name.h
new file mode 100644
index 0000000..ff793da
--- /dev/null
+++ b/rs_bindings_from_cc/test/annotations/rust_name.h
@@ -0,0 +1,27 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+#ifndef THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_ANNOTATIONS_RUST_NAME_H_
+#define THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_ANNOTATIONS_RUST_NAME_H_
+
+#include "support/annotations.h"
+
+namespace crubit::test {
+
+CRUBIT_RUST_NAME("free_fn_new_name")
+inline void FreeFnOldName() {}
+
+struct CRUBIT_RUST_NAME("StructNewName") StructOldName {};
+
+struct SomeStruct {
+  SomeStruct() : field_old_name(24601) {}
+  CRUBIT_RUST_NAME("ConstructorNewName")
+  SomeStruct(int a, int b, int c) : field_old_name(a + b + c) {}
+  CRUBIT_RUST_NAME("MethodNewName") void MethodOldName() const {}
+  CRUBIT_RUST_NAME("field_new_name") int field_old_name;
+};
+
+}  // namespace crubit::test
+
+#endif  // THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_ANNOTATIONS_RUST_NAME_H_
diff --git a/rs_bindings_from_cc/test/annotations/rust_name_api_impl.cc b/rs_bindings_from_cc/test/annotations/rust_name_api_impl.cc
new file mode 100644
index 0000000..c5d6a2b
--- /dev/null
+++ b/rs_bindings_from_cc/test/annotations/rust_name_api_impl.cc
@@ -0,0 +1,72 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+// Automatically @generated Rust bindings for the following C++ target:
+// //rs_bindings_from_cc/test/annotations:rust_name
+// Features: experimental, infer_operator_lifetimes, supported, unsafe_types, wrapper
+
+#include "support/internal/cxx20_backports.h"
+#include "support/internal/offsetof.h"
+#include "support/internal/sizeof.h"
+
+#include <cstddef>
+#include <memory>
+
+// Public headers of the C++ library being wrapped.
+#include "rs_bindings_from_cc/test/annotations/rust_name.h"
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wthread-safety-analysis"
+
+extern "C" void __rust_thunk___ZN6crubit4test13FreeFnOldNameEv() {
+  crubit::test::FreeFnOldName();
+}
+
+static_assert(sizeof(struct crubit::test::StructOldName) == 1);
+static_assert(alignof(struct crubit::test::StructOldName) == 1);
+
+extern "C" void __rust_thunk___ZN6crubit4test13StructOldNameC1Ev(
+    struct crubit::test::StructOldName* __this) {
+  crubit::construct_at(__this);
+}
+
+static_assert(CRUBIT_SIZEOF(struct crubit::test::SomeStruct) == 4);
+static_assert(alignof(struct crubit::test::SomeStruct) == 4);
+static_assert(CRUBIT_OFFSET_OF(field_old_name,
+                               struct crubit::test::SomeStruct) == 0);
+
+extern "C" void __rust_thunk___ZN6crubit4test10SomeStructC1Ev(
+    struct crubit::test::SomeStruct* __this) {
+  crubit::construct_at(__this);
+}
+
+extern "C" void __rust_thunk___ZN6crubit4test10SomeStructC1Eiii(
+    struct crubit::test::SomeStruct* __this, int a, int b, int c) {
+  crubit::construct_at(__this, a, b, c);
+}
+
+extern "C" void __rust_thunk___ZNK6crubit4test10SomeStruct13MethodOldNameEv(
+    const struct crubit::test::SomeStruct* __this) {
+  __this->MethodOldName();
+}
+
+static_assert(sizeof(struct std::integral_constant<bool, false>) == 1);
+static_assert(alignof(struct std::integral_constant<bool, false>) == 1);
+
+extern "C" void
+__rust_thunk___ZNSt3__u17integral_constantIbLb0EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(
+    struct std::integral_constant<bool, false>* __this) {
+  crubit::construct_at(__this);
+}
+
+static_assert(sizeof(struct std::integral_constant<bool, true>) == 1);
+static_assert(alignof(struct std::integral_constant<bool, true>) == 1);
+
+extern "C" void
+__rust_thunk___ZNSt3__u17integral_constantIbLb1EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(
+    struct std::integral_constant<bool, true>* __this) {
+  crubit::construct_at(__this);
+}
+
+#pragma clang diagnostic pop
diff --git a/rs_bindings_from_cc/test/annotations/rust_name_rs_api.rs b/rs_bindings_from_cc/test/annotations/rust_name_rs_api.rs
new file mode 100644
index 0000000..933c4ab
--- /dev/null
+++ b/rs_bindings_from_cc/test/annotations/rust_name_rs_api.rs
@@ -0,0 +1,279 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+// Automatically @generated Rust bindings for the following C++ target:
+// //rs_bindings_from_cc/test/annotations:rust_name
+// Features: experimental, infer_operator_lifetimes, supported, unsafe_types, wrapper
+
+#![rustfmt::skip]
+#![feature(allocator_api, cfg_sanitize, custom_inner_attributes, negative_impls)]
+#![allow(stable_features)]
+#![no_std]
+#![allow(improper_ctypes)]
+#![allow(nonstandard_style)]
+#![allow(dead_code, unused_mut)]
+#![deny(warnings)]
+
+pub mod crubit {
+    pub mod test {
+        /// Generated from: rs_bindings_from_cc/test/annotations/rust_name.h;l=13
+        #[inline(always)]
+        pub fn free_fn_new_name() {
+            unsafe { crate::detail::__rust_thunk___ZN6crubit4test13FreeFnOldNameEv() }
+        }
+
+        /// Generated from: rs_bindings_from_cc/test/annotations/rust_name.h;l=15
+        #[derive(Clone, Copy, ::ctor::MoveAndAssignViaCopy)]
+        #[repr(C)]
+        ///CRUBIT_ANNOTATE: cpp_type=crubit :: test :: StructOldName
+        pub struct StructNewName {
+            __non_field_data: [::core::mem::MaybeUninit<u8>; 1],
+        }
+        impl !Send for StructNewName {}
+        impl !Sync for StructNewName {}
+        unsafe impl ::cxx::ExternType for StructNewName {
+            type Id = ::cxx::type_id!("crubit :: test :: StructOldName");
+            type Kind = ::cxx::kind::Trivial;
+        }
+        forward_declare::unsafe_define!(
+            forward_declare::symbol!("crubit :: test :: StructOldName"),
+            crate::crubit::test::StructNewName
+        );
+
+        /// Generated from: rs_bindings_from_cc/test/annotations/rust_name.h;l=15
+        impl Default for StructNewName {
+            #[inline(always)]
+            fn default() -> Self {
+                let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
+                unsafe {
+                    crate::detail::__rust_thunk___ZN6crubit4test13StructOldNameC1Ev(
+                        &raw mut tmp as *mut _,
+                    );
+                    tmp.assume_init()
+                }
+            }
+        }
+
+        /// Generated from: rs_bindings_from_cc/test/annotations/rust_name.h;l=17
+        #[derive(Clone, Copy, ::ctor::MoveAndAssignViaCopy)]
+        #[repr(C)]
+        ///CRUBIT_ANNOTATE: cpp_type=crubit :: test :: SomeStruct
+        pub struct SomeStruct {
+            __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
+            pub field_new_name: ::core::ffi::c_int,
+        }
+        impl !Send for SomeStruct {}
+        impl !Sync for SomeStruct {}
+        unsafe impl ::cxx::ExternType for SomeStruct {
+            type Id = ::cxx::type_id!("crubit :: test :: SomeStruct");
+            type Kind = ::cxx::kind::Trivial;
+        }
+        forward_declare::unsafe_define!(
+            forward_declare::symbol!("crubit :: test :: SomeStruct"),
+            crate::crubit::test::SomeStruct
+        );
+
+        /// Generated from: rs_bindings_from_cc/test/annotations/rust_name.h;l=18
+        impl Default for SomeStruct {
+            #[inline(always)]
+            fn default() -> Self {
+                let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
+                unsafe {
+                    crate::detail::__rust_thunk___ZN6crubit4test10SomeStructC1Ev(
+                        &raw mut tmp as *mut _,
+                    );
+                    tmp.assume_init()
+                }
+            }
+        }
+
+        impl SomeStruct {
+            /// Generated from: support/internal/attribute_macros.h;l=13
+            /// Expanded at: rs_bindings_from_cc/test/annotations/rust_name.h;l=19
+            #[inline(always)]
+            pub fn ConstructorNewName(
+                a: ::core::ffi::c_int,
+                b: ::core::ffi::c_int,
+                c: ::core::ffi::c_int,
+            ) -> Self {
+                let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
+                unsafe {
+                    crate::detail::__rust_thunk___ZN6crubit4test10SomeStructC1Eiii(
+                        &raw mut tmp as *mut _,
+                        a,
+                        b,
+                        c,
+                    );
+                    tmp.assume_init()
+                }
+            }
+        }
+
+        impl SomeStruct {
+            /// Generated from: support/internal/attribute_macros.h;l=13
+            /// Expanded at: rs_bindings_from_cc/test/annotations/rust_name.h;l=21
+            #[inline(always)]
+            pub unsafe fn MethodNewName(__this: *const Self) {
+                crate::detail::__rust_thunk___ZNK6crubit4test10SomeStruct13MethodOldNameEv(__this)
+            }
+        }
+    }
+}
+
+// namespace crubit::test
+
+/// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=21
+#[derive(Clone, Copy, ::ctor::MoveAndAssignViaCopy)]
+#[repr(C)]
+///CRUBIT_ANNOTATE: cpp_type=std :: integral_constant < bool , false >
+pub struct __CcTemplateInstNSt3__u17integral_constantIbLb0EEE {
+    __non_field_data: [::core::mem::MaybeUninit<u8>; 1],
+}
+impl !Send for __CcTemplateInstNSt3__u17integral_constantIbLb0EEE {}
+impl !Sync for __CcTemplateInstNSt3__u17integral_constantIbLb0EEE {}
+forward_declare::unsafe_define!(
+    forward_declare::symbol!("std :: integral_constant < bool , false >"),
+    crate::__CcTemplateInstNSt3__u17integral_constantIbLb0EEE
+);
+
+/// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=21
+impl Default for __CcTemplateInstNSt3__u17integral_constantIbLb0EEE {
+    #[inline(always)]
+    fn default() -> Self {
+        let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
+        unsafe {
+            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb0EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(&raw mut tmp as*mut _);
+            tmp.assume_init()
+        }
+    }
+}
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=22
+// Error while generating bindings for global variable 'std::integral_constant<bool, false>::value':
+// static data members are not supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=23
+// Error while generating bindings for type alias 'value_type':
+// Can't generate bindings for value_type, because it is unsupported: b/200067824: type definitions nested inside templated records are not yet supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=24
+// Error while generating bindings for type alias 'type':
+// Can't generate bindings for type, because it is unsupported: b/200067824: type definitions nested inside templated records are not yet supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__config;l=367
+// Expanded at: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=25
+// Error while generating bindings for function 'std::integral_constant<bool, false>::operator bool':
+// Function name is not supported: Unsupported name: operator bool
+
+// Generated from: nowhere/llvm/src/libcxx/include/__config;l=367
+// Expanded at: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=27
+// Error while generating bindings for function 'std::integral_constant<bool, false>::operator()':
+// Bindings for this kind of operator (operator () with 1 parameter(s)) are not supported
+
+/// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=21
+#[derive(Clone, Copy, ::ctor::MoveAndAssignViaCopy)]
+#[repr(C)]
+///CRUBIT_ANNOTATE: cpp_type=std :: integral_constant < bool , true >
+pub struct __CcTemplateInstNSt3__u17integral_constantIbLb1EEE {
+    __non_field_data: [::core::mem::MaybeUninit<u8>; 1],
+}
+impl !Send for __CcTemplateInstNSt3__u17integral_constantIbLb1EEE {}
+impl !Sync for __CcTemplateInstNSt3__u17integral_constantIbLb1EEE {}
+forward_declare::unsafe_define!(
+    forward_declare::symbol!("std :: integral_constant < bool , true >"),
+    crate::__CcTemplateInstNSt3__u17integral_constantIbLb1EEE
+);
+
+/// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=21
+impl Default for __CcTemplateInstNSt3__u17integral_constantIbLb1EEE {
+    #[inline(always)]
+    fn default() -> Self {
+        let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
+        unsafe {
+            crate::detail::__rust_thunk___ZNSt3__u17integral_constantIbLb1EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(&raw mut tmp as*mut _);
+            tmp.assume_init()
+        }
+    }
+}
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=22
+// Error while generating bindings for global variable 'std::integral_constant<bool, true>::value':
+// static data members are not supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=23
+// Error while generating bindings for type alias 'value_type':
+// Can't generate bindings for value_type, because it is unsupported: b/200067824: type definitions nested inside templated records are not yet supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=24
+// Error while generating bindings for type alias 'type':
+// Can't generate bindings for type, because it is unsupported: b/200067824: type definitions nested inside templated records are not yet supported
+
+// Generated from: nowhere/llvm/src/libcxx/include/__config;l=367
+// Expanded at: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=25
+// Error while generating bindings for function 'std::integral_constant<bool, true>::operator bool':
+// Function name is not supported: Unsupported name: operator bool
+
+// Generated from: nowhere/llvm/src/libcxx/include/__config;l=367
+// Expanded at: nowhere/llvm/src/libcxx/include/__type_traits/integral_constant.h;l=27
+// Error while generating bindings for function 'std::integral_constant<bool, true>::operator()':
+// Bindings for this kind of operator (operator () with 1 parameter(s)) are not supported
+
+mod detail {
+    #[allow(unused_imports)]
+    use super::*;
+    unsafe extern "C" {
+        pub(crate) unsafe fn __rust_thunk___ZN6crubit4test13FreeFnOldNameEv();
+        pub(crate) unsafe fn __rust_thunk___ZN6crubit4test13StructOldNameC1Ev(
+            __this: *mut ::core::ffi::c_void,
+        );
+        pub(crate) unsafe fn __rust_thunk___ZN6crubit4test10SomeStructC1Ev(
+            __this: *mut ::core::ffi::c_void,
+        );
+        pub(crate) unsafe fn __rust_thunk___ZN6crubit4test10SomeStructC1Eiii(
+            __this: *mut crate::crubit::test::SomeStruct,
+            a: ::core::ffi::c_int,
+            b: ::core::ffi::c_int,
+            c: ::core::ffi::c_int,
+        );
+        pub(crate) unsafe fn __rust_thunk___ZNK6crubit4test10SomeStruct13MethodOldNameEv(
+            __this: *const crate::crubit::test::SomeStruct,
+        );
+        pub(crate) unsafe fn __rust_thunk___ZNSt3__u17integral_constantIbLb0EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(
+            __this: *mut ::core::ffi::c_void,
+        );
+        pub(crate) unsafe fn __rust_thunk___ZNSt3__u17integral_constantIbLb1EEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fannotations_3arust_5fname(
+            __this: *mut ::core::ffi::c_void,
+        );
+    }
+}
+
+const _: () = {
+    assert!(::core::mem::size_of::<crate::crubit::test::StructNewName>() == 1);
+    assert!(::core::mem::align_of::<crate::crubit::test::StructNewName>() == 1);
+    static_assertions::assert_impl_all!(crate::crubit::test::StructNewName: Copy,Clone);
+    static_assertions::assert_not_impl_any!(crate::crubit::test::StructNewName: Drop);
+
+    assert!(::core::mem::size_of::<crate::crubit::test::SomeStruct>() == 4);
+    assert!(::core::mem::align_of::<crate::crubit::test::SomeStruct>() == 4);
+    static_assertions::assert_impl_all!(crate::crubit::test::SomeStruct: Copy,Clone);
+    static_assertions::assert_not_impl_any!(crate::crubit::test::SomeStruct: Drop);
+    assert!(::core::mem::offset_of!(crate::crubit::test::SomeStruct, field_new_name) == 0);
+    assert!(
+        ::core::mem::size_of::<crate::__CcTemplateInstNSt3__u17integral_constantIbLb0EEE>() == 1
+    );
+    assert!(
+        ::core::mem::align_of::<crate::__CcTemplateInstNSt3__u17integral_constantIbLb0EEE>() == 1
+    );
+    static_assertions::assert_impl_all!(crate::__CcTemplateInstNSt3__u17integral_constantIbLb0EEE: Copy,Clone);
+    static_assertions::assert_not_impl_any!(crate::__CcTemplateInstNSt3__u17integral_constantIbLb0EEE: Drop);
+
+    assert!(
+        ::core::mem::size_of::<crate::__CcTemplateInstNSt3__u17integral_constantIbLb1EEE>() == 1
+    );
+    assert!(
+        ::core::mem::align_of::<crate::__CcTemplateInstNSt3__u17integral_constantIbLb1EEE>() == 1
+    );
+    static_assertions::assert_impl_all!(crate::__CcTemplateInstNSt3__u17integral_constantIbLb1EEE: Copy,Clone);
+    static_assertions::assert_not_impl_any!(crate::__CcTemplateInstNSt3__u17integral_constantIbLb1EEE: Drop);
+};
diff --git a/rs_bindings_from_cc/test/annotations/rust_name_test.rs b/rs_bindings_from_cc/test/annotations/rust_name_test.rs
new file mode 100644
index 0000000..993511e
--- /dev/null
+++ b/rs_bindings_from_cc/test/annotations/rust_name_test.rs
@@ -0,0 +1,34 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+use googletest::gtest;
+use rust_name::crubit::test::SomeStruct;
+
+#[gtest]
+fn test_renamed_free_fn() {
+    rust_name::crubit::test::free_fn_new_name();
+}
+
+#[gtest]
+fn test_renamed_struct() {
+    rust_name::crubit::test::StructNewName::default();
+}
+
+#[gtest]
+fn test_renamed_constructor() {
+    let x = SomeStruct::ConstructorNewName(1, 2, 3);
+    assert_eq!(x.field_new_name, 1 + 2 + 3);
+}
+
+#[gtest]
+fn test_renamed_method() {
+    let x = SomeStruct::default();
+    unsafe { SomeStruct::MethodNewName(&raw const x) };
+}
+
+#[gtest]
+fn test_renamed_field() {
+    let x = SomeStruct::default();
+    assert_eq!(x.field_new_name, 24601);
+}
diff --git a/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs b/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs
index d789efa..0b03090 100644
--- a/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs
@@ -55,9 +55,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13WithBitfieldsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13WithBitfieldsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -89,9 +87,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23AlignmentRegressionTestC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN23AlignmentRegressionTestC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api.rs b/rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api.rs
index 3fe316d..b3eb137 100644
--- a/rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api.rs
@@ -35,7 +35,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN1XC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN1XC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/clang_attrs_rs_api.rs b/rs_bindings_from_cc/test/golden/clang_attrs_rs_api.rs
index 75ab902..d31ab49 100644
--- a/rs_bindings_from_cc/test/golden/clang_attrs_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/clang_attrs_rs_api.rs
@@ -36,9 +36,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18HasCustomAlignmentC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18HasCustomAlignmentC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -67,7 +65,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN27HasFieldWithCustomAlignmentC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -97,7 +95,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN35InheritsFromBaseWithCustomAlignmentC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -135,7 +133,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN29HasCustomAlignmentWithGnuAttrC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -178,7 +176,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN28template_with_preferred_name12SomeTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aclang_5fattrs_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN28template_with_preferred_name12SomeTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aclang_5fattrs_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/comment_rs_api.rs b/rs_bindings_from_cc/test/golden/comment_rs_api.rs
index 3046899..4709ecb 100644
--- a/rs_bindings_from_cc/test/golden/comment_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/comment_rs_api.rs
@@ -43,7 +43,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -90,7 +90,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN3BarC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN3BarC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -116,9 +116,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13HasNoCommentsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13HasNoCommentsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs b/rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs
index 06ca83b..f6b082f 100644
--- a/rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs
@@ -60,7 +60,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN4Vec3C1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN4Vec3C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/crubit_internal_rust_type_rs_api.rs b/rs_bindings_from_cc/test/golden/crubit_internal_rust_type_rs_api.rs
index b4e317a..773f105 100644
--- a/rs_bindings_from_cc/test/golden/crubit_internal_rust_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/crubit_internal_rust_type_rs_api.rs
@@ -64,9 +64,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN25TypeMapOverrideFieldTypesC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN25TypeMapOverrideFieldTypesC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/definition_of_forward_declaration_rs_api.rs b/rs_bindings_from_cc/test/golden/definition_of_forward_declaration_rs_api.rs
index 151754d..a76ab12 100644
--- a/rs_bindings_from_cc/test/golden/definition_of_forward_declaration_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/definition_of_forward_declaration_rs_api.rs
@@ -36,9 +36,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN21ForwardDeclaredStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN21ForwardDeclaredStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/doc_comment_rs_api.rs b/rs_bindings_from_cc/test/golden/doc_comment_rs_api.rs
index 4876295..2815a43 100644
--- a/rs_bindings_from_cc/test/golden/doc_comment_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/doc_comment_rs_api.rs
@@ -43,9 +43,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN17DocCommentSlashesC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN17DocCommentSlashesC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -59,7 +57,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN17DocCommentSlashesC1Ei(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
                 __param_0,
             );
             tmp.assume_init()
@@ -124,9 +122,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN14DocCommentBangC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN14DocCommentBangC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -158,9 +154,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN24MultilineCommentTwoStarsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN24MultilineCommentTwoStarsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -189,9 +183,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN11LineCommentC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN11LineCommentC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -223,9 +215,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN16MultilineOneStarC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN16MultilineOneStarC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -284,7 +274,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -322,7 +312,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -357,7 +347,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13OuterTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN13OuterTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/escaping_keywords_rs_api.rs b/rs_bindings_from_cc/test/golden/escaping_keywords_rs_api.rs
index 2cc3894..cea0a97 100644
--- a/rs_bindings_from_cc/test/golden/escaping_keywords_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/escaping_keywords_rs_api.rs
@@ -33,7 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN4typeC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN4typeC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/friend_functions_rs_api.rs b/rs_bindings_from_cc/test/golden/friend_functions_rs_api.rs
index 281617f..0c02f5d 100644
--- a/rs_bindings_from_cc/test/golden/friend_functions_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/friend_functions_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/inheritance_rs_api.rs b/rs_bindings_from_cc/test/golden/inheritance_rs_api.rs
index c435e75..3a2cd27 100644
--- a/rs_bindings_from_cc/test/golden/inheritance_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/inheritance_rs_api.rs
@@ -42,7 +42,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN5Base0C1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN5Base0C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -73,7 +73,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN5Base1C1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN5Base1C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -101,7 +101,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN5Base2C1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN5Base2C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -127,7 +127,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN7DerivedC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN7DerivedC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -542,9 +542,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN11MethodBase1C1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN11MethodBase1C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -597,9 +595,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN11MethodBase2C1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN11MethodBase2C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -638,9 +634,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13MethodDerivedC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13MethodDerivedC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/item_order_rs_api.rs b/rs_bindings_from_cc/test/golden/item_order_rs_api.rs
index 5a6cb91..ef7244c 100644
--- a/rs_bindings_from_cc/test/golden/item_order_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/item_order_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN11FirstStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN11FirstStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -65,9 +63,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN12SecondStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN12SecondStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/method_qualifiers_rs_api.rs b/rs_bindings_from_cc/test/golden/method_qualifiers_rs_api.rs
index a220698..4ab4a48 100644
--- a/rs_bindings_from_cc/test/golden/method_qualifiers_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/method_qualifiers_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9NoninlineC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9NoninlineC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -95,7 +93,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN6InlineC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN6InlineC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/namespace_rs_api.rs b/rs_bindings_from_cc/test/golden/namespace_rs_api.rs
index 5a28385..cb0527b 100644
--- a/rs_bindings_from_cc/test/golden/namespace_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/namespace_rs_api.rs
@@ -38,7 +38,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN23test_namespace_bindings1SC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -119,7 +119,7 @@
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
                     crate::detail::__rust_thunk___ZN32test_namespace_bindings_reopened5inner1SC1Ev(
-                        &raw mut tmp as *mut ::core::ffi::c_void,
+                        &raw mut tmp as *mut _,
                     );
                     tmp.assume_init()
                 }
@@ -169,7 +169,7 @@
             fn default() -> Self {
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    crate::detail::__rust_thunk___ZN30test_namespace_bindings_inline5inner23StructInInlineNamespaceC1Ev(&raw mut tmp as*mut::core::ffi::c_void);
+                    crate::detail::__rust_thunk___ZN30test_namespace_bindings_inline5inner23StructInInlineNamespaceC1Ev(&raw mut tmp as*mut _);
                     tmp.assume_init()
                 }
             }
diff --git a/rs_bindings_from_cc/test/golden/nested_types_rs_api.rs b/rs_bindings_from_cc/test/golden/nested_types_rs_api.rs
index f29a7a4..632f68a 100644
--- a/rs_bindings_from_cc/test/golden/nested_types_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/nested_types_rs_api.rs
@@ -33,7 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -62,9 +62,7 @@
         fn default() -> Self {
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
-                crate::detail::__rust_thunk___ZN3Foo3BarC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
-                );
+                crate::detail::__rust_thunk___ZN3Foo3BarC1Ev(&raw mut tmp as *mut _);
                 tmp.assume_init()
             }
         }
@@ -96,9 +94,7 @@
             fn default() -> Self {
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    crate::detail::__rust_thunk___ZN3Foo3Bar3BazC1Ev(
-                        &raw mut tmp as *mut ::core::ffi::c_void,
-                    );
+                    crate::detail::__rust_thunk___ZN3Foo3Bar3BazC1Ev(&raw mut tmp as *mut _);
                     tmp.assume_init()
                 }
             }
@@ -128,9 +124,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18already_snake_caseC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18already_snake_caseC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -161,9 +155,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN25ConflictingSnakeCaseNamesC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN25ConflictingSnakeCaseNamesC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -195,7 +187,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN26ConflictingSnakeCaseNames_C1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -227,9 +219,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN21OnlyOneHasNestedItemsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN21OnlyOneHasNestedItemsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -264,9 +254,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN22OnlyOneHasNestedItems_C1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN22OnlyOneHasNestedItems_C1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -296,9 +284,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN19SameNameAsNamespaceC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN19SameNameAsNamespaceC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -333,7 +319,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN22same_name_as_namespace3FooC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -363,7 +349,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN22same_name_as_namespace3BarC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -397,7 +383,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN19no_longer_top_level18already_snake_caseC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -429,7 +415,7 @@
         fn default() -> Self {
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
-                crate::detail::__rust_thunk___ZN19no_longer_top_level25ConflictingSnakeCaseNamesC1Ev(&raw mut tmp as*mut::core::ffi::c_void);
+                crate::detail::__rust_thunk___ZN19no_longer_top_level25ConflictingSnakeCaseNamesC1Ev(&raw mut tmp as*mut _);
                 tmp.assume_init()
             }
         }
@@ -460,7 +446,7 @@
         fn default() -> Self {
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
-                crate::detail::__rust_thunk___ZN19no_longer_top_level26ConflictingSnakeCaseNames_C1Ev(&raw mut tmp as*mut::core::ffi::c_void);
+                crate::detail::__rust_thunk___ZN19no_longer_top_level26ConflictingSnakeCaseNames_C1Ev(&raw mut tmp as*mut _);
                 tmp.assume_init()
             }
         }
@@ -492,7 +478,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN19no_longer_top_level21OnlyOneHasNestedItemsC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -529,7 +515,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN19no_longer_top_level22OnlyOneHasNestedItems_C1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -561,7 +547,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN19no_longer_top_level19SameNameAsNamespaceC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -596,7 +582,7 @@
             fn default() -> Self {
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    crate::detail::__rust_thunk___ZN19no_longer_top_level22same_name_as_namespace3FooC1Ev(&raw mut tmp as*mut::core::ffi::c_void);
+                    crate::detail::__rust_thunk___ZN19no_longer_top_level22same_name_as_namespace3FooC1Ev(&raw mut tmp as*mut _);
                     tmp.assume_init()
                 }
             }
@@ -624,7 +610,7 @@
             fn default() -> Self {
                 let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
                 unsafe {
-                    crate::detail::__rust_thunk___ZN19no_longer_top_level22same_name_as_namespace3BarC1Ev(&raw mut tmp as*mut::core::ffi::c_void);
+                    crate::detail::__rust_thunk___ZN19no_longer_top_level22same_name_as_namespace3BarC1Ev(&raw mut tmp as*mut _);
                     tmp.assume_init()
                 }
             }
diff --git a/rs_bindings_from_cc/test/golden/no_elided_lifetimes_rs_api.rs b/rs_bindings_from_cc/test/golden/no_elided_lifetimes_rs_api.rs
index d94e5b3..d2e7196 100644
--- a/rs_bindings_from_cc/test/golden/no_elided_lifetimes_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/no_elided_lifetimes_rs_api.rs
@@ -44,7 +44,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN1SC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN1SC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -161,10 +161,7 @@
     fn from(value: ::core::ffi::c_int) -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN12WrappedValueC1Ei(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-                value,
-            );
+            crate::detail::__rust_thunk___ZN12WrappedValueC1Ei(&raw mut tmp as *mut _, value);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs b/rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs
index bc862ce..c16028e 100644
--- a/rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs
@@ -66,7 +66,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN6StructC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN6StructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -129,9 +129,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20PaddingBetweenFieldsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20PaddingBetweenFieldsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/nodiscard_rs_api.rs b/rs_bindings_from_cc/test/golden/nodiscard_rs_api.rs
index 73871f0..c6f9cf9 100644
--- a/rs_bindings_from_cc/test/golden/nodiscard_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/nodiscard_rs_api.rs
@@ -34,9 +34,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9NoDiscardC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9NoDiscardC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -65,9 +63,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20NoDiscardWithMessageC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20NoDiscardWithMessageC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/non_member_operator_rs_api.rs b/rs_bindings_from_cc/test/golden/non_member_operator_rs_api.rs
index 14bc426..a6898e1 100644
--- a/rs_bindings_from_cc/test/golden/non_member_operator_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/non_member_operator_rs_api.rs
@@ -34,7 +34,7 @@
         fn default() -> Self {
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
-                crate::detail::__rust_thunk___ZN2ns1XC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+                crate::detail::__rust_thunk___ZN2ns1XC1Ev(&raw mut tmp as *mut _);
                 tmp.assume_init()
             }
         }
diff --git a/rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs b/rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs
index 3e173e6..db8cf99 100644
--- a/rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs
@@ -614,9 +614,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -627,10 +625,7 @@
     fn from(field: ::core::ffi::c_int) -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1Ei(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-                field,
-            );
+            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1Ei(&raw mut tmp as *mut _, field);
             tmp.assume_init()
         }
     }
@@ -652,10 +647,7 @@
     fn clone<'b>(&'b self) -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1ERKS_(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-                self,
-            );
+            crate::detail::__rust_thunk___ZN15NontrivialUnpinC1ERKS_(&raw mut tmp as *mut _, self);
             tmp.assume_init()
         }
     }
@@ -671,7 +663,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN15NontrivialUnpinC1EOS_(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
                 __param_0,
             );
             tmp.assume_init()
@@ -693,7 +685,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN15NontrivialUnpinC1EO10Nontrivial(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
                 __param_0,
             );
             tmp.assume_init()
diff --git a/rs_bindings_from_cc/test/golden/operators_rs_api.rs b/rs_bindings_from_cc/test/golden/operators_rs_api.rs
index 24c798e..fe8deb1 100644
--- a/rs_bindings_from_cc/test/golden/operators_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/operators_rs_api.rs
@@ -45,9 +45,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18AddableConstMemberC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18AddableConstMemberC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -94,9 +92,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN21AddableNonConstMemberC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN21AddableNonConstMemberC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -142,9 +138,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13AddableFriendC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13AddableFriendC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -188,9 +182,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN21AddableFreeByConstRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN21AddableFreeByConstRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -218,9 +210,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN19AddableFreeByMutRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN19AddableFreeByMutRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -248,9 +238,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18AddableFreeByValueC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18AddableFreeByValueC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -278,9 +266,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN22AddableFreeByRValueRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN22AddableFreeByRValueRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -360,9 +346,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10OverloadedC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN10OverloadedC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -406,9 +390,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN15IncompatibleLHSC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN15IncompatibleLHSC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -445,9 +427,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18AddableReturnsVoidC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18AddableReturnsVoidC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -580,9 +560,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18AddAssignMemberIntC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18AddAssignMemberIntC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -619,9 +597,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN25AddAssignMemberByConstRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN25AddAssignMemberByConstRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -658,9 +634,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23AddAssignFreeByConstRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN23AddAssignFreeByConstRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -697,9 +671,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20AddAssignFreeByValueC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20AddAssignFreeByValueC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -736,9 +708,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN25AddAssignFriendByConstRefC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN25AddAssignFriendByConstRefC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -775,9 +745,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN22AddAssignFriendByValueC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN22AddAssignFriendByValueC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -815,7 +783,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN30AddAssignProhibitedConstMemberC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -863,7 +831,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN33AddAssignProhibitedFriendConstLhsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
@@ -907,9 +875,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13ManyOperatorsC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13ManyOperatorsC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/overloads_rs_api.rs b/rs_bindings_from_cc/test/golden/overloads_rs_api.rs
index 6406d1f..895e347 100644
--- a/rs_bindings_from_cc/test/golden/overloads_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/overloads_rs_api.rs
@@ -71,7 +71,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN3FooC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -122,7 +122,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN6SizeofIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aoverloads_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN6SizeofIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aoverloads_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -149,7 +149,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN6SizeofIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aoverloads_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN6SizeofIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aoverloads_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/overloads_unsupported_type_rs_api.rs b/rs_bindings_from_cc/test/golden/overloads_unsupported_type_rs_api.rs
index 9771921..61cebec 100644
--- a/rs_bindings_from_cc/test/golden/overloads_unsupported_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/overloads_unsupported_type_rs_api.rs
@@ -37,9 +37,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/private_members_rs_api.rs b/rs_bindings_from_cc/test/golden/private_members_rs_api.rs
index 9be3bd3..82d5e2d 100644
--- a/rs_bindings_from_cc/test/golden/private_members_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/private_members_rs_api.rs
@@ -42,7 +42,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN23test_namespace_bindings9SomeClassC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
diff --git a/rs_bindings_from_cc/test/golden/private_method_rs_api.rs b/rs_bindings_from_cc/test/golden/private_method_rs_api.rs
index 25d1c16..cc27830 100644
--- a/rs_bindings_from_cc/test/golden/private_method_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/private_method_rs_api.rs
@@ -36,7 +36,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN5OuterC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN5OuterC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/static_methods_rs_api.rs b/rs_bindings_from_cc/test/golden/static_methods_rs_api.rs
index 3044be9..15cc021 100644
--- a/rs_bindings_from_cc/test/golden/static_methods_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/static_methods_rs_api.rs
@@ -36,9 +36,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9SomeClassC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/templates_rs_api.rs b/rs_bindings_from_cc/test/golden/templates_rs_api.rs
index 759fa06..3bdb9b0 100644
--- a/rs_bindings_from_cc/test/golden/templates_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/templates_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN14DifferentScopeC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN14DifferentScopeC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -73,7 +71,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN23test_namespace_bindings13TemplateParamC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -199,7 +197,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateI14DifferentScopeEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateI14DifferentScopeEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -250,7 +248,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateINS_13TemplateParamEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateINS_13TemplateParamEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -299,7 +297,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -343,7 +341,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsINS0_IiiEEiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsINS0_IiiEEiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -368,7 +366,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsIifEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsIifEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -393,7 +391,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsIiiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsIiiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -419,7 +417,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23test_namespace_bindings8MyStructIcEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN23test_namespace_bindings8MyStructIcEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -443,7 +441,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18MyTopLevelTemplateIN23test_namespace_bindings13TemplateParamEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN18MyTopLevelTemplateIN23test_namespace_bindings13TemplateParamEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -471,7 +469,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN24template_template_params10MyTemplateINS_6PolicyEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN24template_template_params10MyTemplateINS_6PolicyEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/templates_source_order_rs_api.rs b/rs_bindings_from_cc/test/golden/templates_source_order_rs_api.rs
index bdb3ac0..4c2b2fd 100644
--- a/rs_bindings_from_cc/test/golden/templates_source_order_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/templates_source_order_rs_api.rs
@@ -36,7 +36,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN8TopLevelC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN8TopLevelC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -78,7 +78,7 @@
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
                 crate::detail::__rust_thunk___ZN23test_namespace_bindings5InnerC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
+                    &raw mut tmp as *mut _,
                 );
                 tmp.assume_init()
             }
@@ -115,7 +115,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateI8TopLevelEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateI8TopLevelEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -149,7 +149,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIN23test_namespace_bindings5InnerEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIN23test_namespace_bindings5InnerEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -183,7 +183,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIS_I8TopLevelEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIS_I8TopLevelEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -220,7 +220,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIS_IN23test_namespace_bindings5InnerEEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIS_IN23test_namespace_bindings5InnerEEEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -257,7 +257,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIbEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIbEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -291,7 +291,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIcEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIcEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -325,7 +325,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIdEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIdEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -359,7 +359,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
@@ -393,7 +393,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(&raw mut tmp as*mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/trivial_type_rs_api.rs b/rs_bindings_from_cc/test/golden/trivial_type_rs_api.rs
index c325a95..f133996 100644
--- a/rs_bindings_from_cc/test/golden/trivial_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/trivial_type_rs_api.rs
@@ -42,9 +42,7 @@
         fn default() -> Self {
             let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
             unsafe {
-                crate::detail::__rust_thunk___ZN2ns7TrivialC1Ev(
-                    &raw mut tmp as *mut ::core::ffi::c_void,
-                );
+                crate::detail::__rust_thunk___ZN2ns7TrivialC1Ev(&raw mut tmp as *mut _);
                 tmp.assume_init()
             }
         }
diff --git a/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs b/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs
index e043e73..7840cae 100644
--- a/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10SomeStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN10SomeStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -73,9 +71,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN15SomeOtherStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN15SomeOtherStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -100,9 +96,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN9SomeUnionC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN9SomeUnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -130,9 +124,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN14SomeOtherUnionC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN14SomeOtherUnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/types_rs_api.rs b/rs_bindings_from_cc/test/golden/types_rs_api.rs
index 571752d..7e2c339 100644
--- a/rs_bindings_from_cc/test/golden/types_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/types_rs_api.rs
@@ -39,9 +39,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10SomeStructC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN10SomeStructC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/unions_rs_api.rs b/rs_bindings_from_cc/test/golden/unions_rs_api.rs
index a4b330d..04e50ec 100644
--- a/rs_bindings_from_cc/test/golden/unions_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/unions_rs_api.rs
@@ -39,9 +39,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN10EmptyUnionC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN10EmptyUnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -121,9 +119,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13UnionToRenameC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13UnionToRenameC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -209,9 +205,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13NonEmptyUnionC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13NonEmptyUnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -325,9 +319,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20UnionWithOpaqueFieldC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20UnionWithOpaqueFieldC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -355,9 +347,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN21TrivialButInheritableC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN21TrivialButInheritableC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -385,9 +375,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20UnionWithInheritableC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20UnionWithInheritableC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -412,9 +400,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN12TypedefUnionC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN12TypedefUnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -443,7 +429,7 @@
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN27TypedefUnionWithInheritableC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
+                &raw mut tmp as *mut _,
             );
             tmp.assume_init()
         }
diff --git a/rs_bindings_from_cc/test/golden/unsafe_types_transitive_rs_api.rs b/rs_bindings_from_cc/test/golden/unsafe_types_transitive_rs_api.rs
index c77bd01..75bb5b2 100644
--- a/rs_bindings_from_cc/test/golden/unsafe_types_transitive_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/unsafe_types_transitive_rs_api.rs
@@ -33,9 +33,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN13PublicPointerC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN13PublicPointerC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -63,9 +61,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN14PrivatePointerC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN14PrivatePointerC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -99,9 +95,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN23TransitivePublicPointerC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN23TransitivePublicPointerC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -127,7 +121,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN5UnionC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN5UnionC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs b/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs
index ffc6245..82da38c 100644
--- a/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs
@@ -42,9 +42,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN17TrivialCustomTypeC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN17TrivialCustomTypeC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/user_of_imported_type_rs_api.rs b/rs_bindings_from_cc/test/golden/user_of_imported_type_rs_api.rs
index 644cf1f..c623cf4 100644
--- a/rs_bindings_from_cc/test/golden/user_of_imported_type_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/user_of_imported_type_rs_api.rs
@@ -48,9 +48,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN18UserOfImportedTypeC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN18UserOfImportedTypeC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/golden/uses_not_crubit_exposed_rs_api.rs b/rs_bindings_from_cc/test/golden/uses_not_crubit_exposed_rs_api.rs
index 74fdd64..13d00eb 100644
--- a/rs_bindings_from_cc/test/golden/uses_not_crubit_exposed_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/uses_not_crubit_exposed_rs_api.rs
@@ -62,9 +62,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN20CannotUpcastInCrubitC1Ev(
-                &raw mut tmp as *mut ::core::ffi::c_void,
-            );
+            crate::detail::__rust_thunk___ZN20CannotUpcastInCrubitC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/struct/inheritance/inherited_methods_rs_api.rs b/rs_bindings_from_cc/test/struct/inheritance/inherited_methods_rs_api.rs
index f722b82..198ccb9 100644
--- a/rs_bindings_from_cc/test/struct/inheritance/inherited_methods_rs_api.rs
+++ b/rs_bindings_from_cc/test/struct/inheritance/inherited_methods_rs_api.rs
@@ -72,7 +72,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN4BaseC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN4BaseC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
@@ -129,7 +129,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN7DerivedC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN7DerivedC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/templates/regression_401857961/repro_rs_api.rs b/rs_bindings_from_cc/test/templates/regression_401857961/repro_rs_api.rs
index 8006851..9e6ad61 100644
--- a/rs_bindings_from_cc/test/templates/regression_401857961/repro_rs_api.rs
+++ b/rs_bindings_from_cc/test/templates/regression_401857961/repro_rs_api.rs
@@ -39,19 +39,19 @@
     // Generated from: rs_bindings_from_cc/test/templates/regression_401857961/repro.h;l=15
     // Error while generating bindings for function 'Interval::Interval':
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::repro::Interval
-    // Expected first parameter to be a `__this` reference, found *mut crate::repro::Interval
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::repro::Interval
 
     // Generated from: rs_bindings_from_cc/test/templates/regression_401857961/repro.h;l=15
     // Error while generating bindings for function 'Interval::Interval':
     // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::repro::Interval
-    // Expected first parameter to be a `__this` reference, found *mut crate::repro::Interval
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::repro::Interval
 
     // Generated from: rs_bindings_from_cc/test/templates/regression_401857961/repro.h;l=15
     // Error while generating bindings for function 'Interval::Interval':
     // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
     // Expected first constructor parameter to be a mutable reference, got: *mut crate::repro::Interval
-    // Expected first parameter to be a `__this` reference, found *mut crate::repro::Interval
+    // Expected first reference parameter `__this` to have a lifetime, found *mut crate::repro::Interval
 
     // Generated from: rs_bindings_from_cc/test/templates/regression_401857961/repro.h;l=15
     // Error while generating bindings for function 'Interval::operator=':
diff --git a/rs_bindings_from_cc/test/templates/type_alias_access_rule/type_alias_access_rule_rs_api.rs b/rs_bindings_from_cc/test/templates/type_alias_access_rule/type_alias_access_rule_rs_api.rs
index 3b99ee2..b7c1ce5 100644
--- a/rs_bindings_from_cc/test/templates/type_alias_access_rule/type_alias_access_rule_rs_api.rs
+++ b/rs_bindings_from_cc/test/templates/type_alias_access_rule/type_alias_access_rule_rs_api.rs
@@ -42,7 +42,7 @@
     fn default() -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
-            crate::detail::__rust_thunk___ZN1BC1Ev(&raw mut tmp as *mut ::core::ffi::c_void);
+            crate::detail::__rust_thunk___ZN1BC1Ev(&raw mut tmp as *mut _);
             tmp.assume_init()
         }
     }
diff --git a/rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor_rs_api.rs b/rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor_rs_api.rs
index 55b6990..ecdb538 100644
--- a/rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor_rs_api.rs
+++ b/rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor_rs_api.rs
@@ -40,12 +40,12 @@
 // Generated from: rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor.h;l=10
 // Error while generating bindings for function 'Nontrivial::Nontrivial':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Nontrivial
-// Expected first parameter to be a `__this` reference, found *mut crate::Nontrivial
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Nontrivial
 
 // Generated from: rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor.h;l=11
 // Error while generating bindings for function 'Nontrivial::Nontrivial':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::Nontrivial
-// Expected first parameter to be a `__this` reference, found *mut crate::Nontrivial
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::Nontrivial
 
 // Generated from: rs_bindings_from_cc/test/wrapper/impl_ctor/impl_ctor.h;l=12
 // Error while generating bindings for function 'Nontrivial::operator=':
diff --git a/rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types_rs_api.rs b/rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types_rs_api.rs
index 3416620..ced6557 100644
--- a/rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types_rs_api.rs
+++ b/rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types_rs_api.rs
@@ -43,19 +43,19 @@
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=23
 // Error while generating bindings for function 'CompoundDataType::CompoundDataType':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::CompoundDataType
-// Expected first parameter to be a `__this` reference, found *mut crate::CompoundDataType
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::CompoundDataType
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=23
 // Error while generating bindings for function 'CompoundDataType::CompoundDataType':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::CompoundDataType
-// Expected first parameter to be a `__this` reference, found *mut crate::CompoundDataType
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::CompoundDataType
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=23
 // Error while generating bindings for function 'CompoundDataType::CompoundDataType':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::CompoundDataType
-// Expected first parameter to be a `__this` reference, found *mut crate::CompoundDataType
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::CompoundDataType
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=23
 // Error while generating bindings for function 'CompoundDataType::operator=':
@@ -141,19 +141,19 @@
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/other_pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template2<int>::Template2<int>':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst9Template2IiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst9Template2IiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst9Template2IiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/other_pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template2<int>::Template2<int>':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst9Template2IiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst9Template2IiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst9Template2IiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/other_pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template2<int>::Template2<int>':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst9Template2IiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst9Template2IiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst9Template2IiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/other_pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template2<int>::operator=':
@@ -180,19 +180,19 @@
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template<int>::Template<int>':
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst8TemplateIiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst8TemplateIiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst8TemplateIiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template<int>::Template<int>':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst8TemplateIiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst8TemplateIiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst8TemplateIiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template<int>::Template<int>':
 // Unsafe constructors (e.g. with no elided or explicit lifetimes) are intentionally not supported. See b/216648347.
 // Expected first constructor parameter to be a mutable reference, got: *mut crate::__CcTemplateInst8TemplateIiE
-// Expected first parameter to be a `__this` reference, found *mut crate::__CcTemplateInst8TemplateIiE
+// Expected first reference parameter `__this` to have a lifetime, found *mut crate::__CcTemplateInst8TemplateIiE
 
 // Generated from: rs_bindings_from_cc/test/wrapper/pub_crate_types/pub_crate_types.h;l=11
 // Error while generating bindings for function 'Template<int>::operator=':
