Map `int` to `core::ffi::c_int` (also for most other builtin C++ types).

This CL provides mappings for most types under `core::ffi`, except for:
* Types like `core::ffi::ptrdiff_t`, because they depend on an
  experimental feature: https://github.com/rust-lang/rust/issues/88345
* `core::ffi::c_char` because of b/276931370 and because continuing
  translating `char` to `u8` reduces the amount of cascading changes in
  this CL (e.g. changes to `crubit/support/cc_std/string_view.rs`).

Note that some other `clang/AST/BuiltinTypes.def` types like `char16_t`
don't have an equivelent under `core::ffi`. This CL doesn't change how
such types are handled (some of them are already covered by
`rs_bindings_from_cc/type_map.cc`).

PiperOrigin-RevId: 533279988
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 f6b140a..60e3429 100644
--- a/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/bitfields_rs_api.rs
@@ -30,12 +30,12 @@
 pub struct WithBitfields {
     // f1 : 2 bits
     __bitfields0: [::core::mem::MaybeUninit<u8>; 1],
-    pub f2: i32,
+    pub f2: ::core::ffi::c_int,
     // f3 : 4 bits
     // f4 : 8 bits
     //  : 45 bits
     __bitfields2: [::core::mem::MaybeUninit<u8>; 10],
-    pub f5: i32,
+    pub f5: ::core::ffi::c_int,
     // f6 : 23 bits
     __bitfields4: [::core::mem::MaybeUninit<u8>; 3],
     /// Reason for representing this field as a blob of bytes:
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 0ca420e..331e7f4 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
@@ -567,7 +567,7 @@
 
 impl __CcTemplateInstN28template_with_preferred_name12SomeTemplateIiEE {
     #[inline(always)]
-    pub fn foo<'a>(self: ::core::pin::Pin<&'a mut Self>) -> i32 {
+    pub fn foo<'a>(self: ::core::pin::Pin<&'a mut Self>) -> ::core::ffi::c_int {
         unsafe {
             crate::detail::__rust_thunk___ZN28template_with_preferred_name12SomeTemplateIiE3fooEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3aclang_5fattrs_5fcc(self)
         }
@@ -713,7 +713,7 @@
             __this: ::core::pin::Pin<
                 &'a mut crate::__CcTemplateInstN28template_with_preferred_name12SomeTemplateIiEE,
             >,
-        ) -> i32;
+        ) -> ::core::ffi::c_int;
     }
 }
 
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 7b8cf81..1524fc6 100644
--- a/rs_bindings_from_cc/test/golden/comment_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/comment_rs_api.rs
@@ -31,9 +31,9 @@
 #[repr(C)]
 pub struct Foo {
     /// A field
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
     /// Another field
-    pub j: i32,
+    pub j: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("Foo"), crate::Foo);
 
@@ -102,7 +102,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct Bar {
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("Bar"), crate::Bar);
 
@@ -150,7 +150,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct HasNoComments {
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("HasNoComments"), crate::HasNoComments);
 
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 f010bcf..52c19c4 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
@@ -28,7 +28,7 @@
 pub struct DocCommentSlashes {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
     /// A field.
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("DocCommentSlashes"),
@@ -79,9 +79,9 @@
 
 /// An implicit conversion constructor which will get translated into `impl
 /// From<int> for DocCommentSlashes`.
-impl From<i32> for DocCommentSlashes {
+impl From<::core::ffi::c_int> for DocCommentSlashes {
     #[inline(always)]
-    fn from(__param_0: i32) -> Self {
+    fn from(__param_0: ::core::ffi::c_int) -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN17DocCommentSlashesC1Ei(&mut tmp, __param_0);
@@ -93,7 +93,7 @@
 impl DocCommentSlashes {
     /// A non-static member function (`const` flavor).
     #[inline(always)]
-    pub fn get_field_value<'a>(&'a self) -> i32 {
+    pub fn get_field_value<'a>(&'a self) -> ::core::ffi::c_int {
         unsafe { crate::detail::__rust_thunk___ZNK17DocCommentSlashes15get_field_valueEv(self) }
     }
 }
@@ -101,7 +101,7 @@
 impl DocCommentSlashes {
     /// A non-static member function (non-`const` flavor).
     #[inline(always)]
-    pub fn set_field_value<'a>(&'a mut self, new_value: i32) {
+    pub fn set_field_value<'a>(&'a mut self, new_value: ::core::ffi::c_int) {
         unsafe {
             crate::detail::__rust_thunk___ZN17DocCommentSlashes15set_field_valueEi(self, new_value)
         }
@@ -111,7 +111,7 @@
 impl DocCommentSlashes {
     /// A static method.
     #[inline(always)]
-    pub fn static_method() -> i32 {
+    pub fn static_method() -> ::core::ffi::c_int {
         unsafe { crate::detail::__rust_thunk___ZN17DocCommentSlashes13static_methodEv() }
     }
 }
@@ -123,7 +123,7 @@
 #[repr(C)]
 pub struct DocCommentBang {
     /// A field
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("DocCommentBang"), crate::DocCommentBang);
 
@@ -174,7 +174,7 @@
 #[repr(C)]
 pub struct MultilineCommentTwoStars {
     /// A field
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("MultilineCommentTwoStars"),
@@ -228,7 +228,7 @@
 #[repr(C)]
 pub struct LineComment {
     /// A field
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("LineComment"), crate::LineComment);
 
@@ -279,7 +279,7 @@
 #[repr(C)]
 pub struct MultilineOneStar {
     /// A field
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("MultilineOneStar"),
@@ -328,7 +328,7 @@
 
 /// A function
 #[inline(always)]
-pub fn foo() -> i32 {
+pub fn foo() -> ::core::ffi::c_int {
     unsafe { crate::detail::__rust_thunk___Z3foov() }
 }
 
@@ -363,7 +363,7 @@
 #[repr(C)]
 pub struct __CcTemplateInst10MyTemplateIiE {
     /// Data member.
-    pub value: i32,
+    pub value: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("MyTemplate<int>"),
@@ -417,7 +417,7 @@
 impl __CcTemplateInst10MyTemplateIiE {
     /// A non-static member function.
     #[inline(always)]
-    pub fn get_field_value<'a>(&'a self) -> &'a i32 {
+    pub fn get_field_value<'a>(&'a self) -> &'a ::core::ffi::c_int {
         unsafe {
             crate::detail::__rust_thunk___ZNK10MyTemplateIiE15get_field_valueEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc(self)
         }
@@ -511,19 +511,19 @@
         #[link_name = "_ZN17DocCommentSlashesC1Ei"]
         pub(crate) fn __rust_thunk___ZN17DocCommentSlashesC1Ei<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::DocCommentSlashes>,
-            __param_0: i32,
+            __param_0: ::core::ffi::c_int,
         );
         #[link_name = "_ZNK17DocCommentSlashes15get_field_valueEv"]
         pub(crate) fn __rust_thunk___ZNK17DocCommentSlashes15get_field_valueEv<'a>(
             __this: &'a crate::DocCommentSlashes,
-        ) -> i32;
+        ) -> ::core::ffi::c_int;
         #[link_name = "_ZN17DocCommentSlashes15set_field_valueEi"]
         pub(crate) fn __rust_thunk___ZN17DocCommentSlashes15set_field_valueEi<'a>(
             __this: &'a mut crate::DocCommentSlashes,
-            new_value: i32,
+            new_value: ::core::ffi::c_int,
         );
         #[link_name = "_ZN17DocCommentSlashes13static_methodEv"]
-        pub(crate) fn __rust_thunk___ZN17DocCommentSlashes13static_methodEv() -> i32;
+        pub(crate) fn __rust_thunk___ZN17DocCommentSlashes13static_methodEv() -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN14DocCommentBangC1Ev<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::DocCommentBang>,
         );
@@ -584,7 +584,7 @@
             __this: &'a mut crate::MultilineOneStar,
             __param_0: ::ctor::RvalueReference<'b, crate::MultilineOneStar>,
         ) -> &'a mut crate::MultilineOneStar;
-        pub(crate) fn __rust_thunk___Z3foov() -> i32;
+        pub(crate) fn __rust_thunk___Z3foov() -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN10MyTemplateIiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc<
             'a,
         >(
@@ -615,7 +615,7 @@
             'a,
         >(
             __this: &'a crate::__CcTemplateInst10MyTemplateIiE,
-        ) -> &'a i32;
+        ) -> &'a ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN10MyTemplateIfEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3adoc_5fcomment_5fcc<
             'a,
         >(
diff --git a/rs_bindings_from_cc/test/golden/enums_rs_api.rs b/rs_bindings_from_cc/test/golden/enums_rs_api.rs
index 31c092c..9d29eef 100644
--- a/rs_bindings_from_cc/test/golden/enums_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/enums_rs_api.rs
@@ -22,34 +22,34 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct Color(u32);
+pub struct Color(::core::ffi::c_uint);
 impl Color {
     pub const kRed: Color = Color(0);
     pub const kBlue: Color = Color(1);
     pub const kGreen: Color = Color(2);
 }
-impl From<u32> for Color {
-    fn from(value: u32) -> Color {
+impl From<::core::ffi::c_uint> for Color {
+    fn from(value: ::core::ffi::c_uint) -> Color {
         Color(value)
     }
 }
-impl From<Color> for u32 {
-    fn from(value: Color) -> u32 {
+impl From<Color> for ::core::ffi::c_uint {
+    fn from(value: Color) -> ::core::ffi::c_uint {
         value.0
     }
 }
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct Empty(u32);
+pub struct Empty(::core::ffi::c_uint);
 impl Empty {}
-impl From<u32> for Empty {
-    fn from(value: u32) -> Empty {
+impl From<::core::ffi::c_uint> for Empty {
+    fn from(value: ::core::ffi::c_uint) -> Empty {
         Empty(value)
     }
 }
-impl From<Empty> for u32 {
-    fn from(value: Empty) -> u32 {
+impl From<Empty> for ::core::ffi::c_uint {
+    fn from(value: Empty) -> ::core::ffi::c_uint {
         value.0
     }
 }
@@ -71,15 +71,15 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct EmptyInt(u32);
+pub struct EmptyInt(::core::ffi::c_uint);
 impl EmptyInt {}
-impl From<u32> for EmptyInt {
-    fn from(value: u32) -> EmptyInt {
+impl From<::core::ffi::c_uint> for EmptyInt {
+    fn from(value: ::core::ffi::c_uint) -> EmptyInt {
         EmptyInt(value)
     }
 }
-impl From<EmptyInt> for u32 {
-    fn from(value: EmptyInt) -> u32 {
+impl From<EmptyInt> for ::core::ffi::c_uint {
+    fn from(value: EmptyInt) -> ::core::ffi::c_uint {
         value.0
     }
 }
@@ -119,18 +119,18 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct NonEmptyInt(u32);
+pub struct NonEmptyInt(::core::ffi::c_uint);
 impl NonEmptyInt {
     pub const kInt1: NonEmptyInt = NonEmptyInt(0);
     pub const kInt2: NonEmptyInt = NonEmptyInt(4294967295);
 }
-impl From<u32> for NonEmptyInt {
-    fn from(value: u32) -> NonEmptyInt {
+impl From<::core::ffi::c_uint> for NonEmptyInt {
+    fn from(value: ::core::ffi::c_uint) -> NonEmptyInt {
         NonEmptyInt(value)
     }
 }
-impl From<NonEmptyInt> for u32 {
-    fn from(value: NonEmptyInt) -> u32 {
+impl From<NonEmptyInt> for ::core::ffi::c_uint {
+    fn from(value: NonEmptyInt) -> ::core::ffi::c_uint {
         value.0
     }
 }
@@ -155,15 +155,15 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct EmptyClass(i32);
+pub struct EmptyClass(::core::ffi::c_int);
 impl EmptyClass {}
-impl From<i32> for EmptyClass {
-    fn from(value: i32) -> EmptyClass {
+impl From<::core::ffi::c_int> for EmptyClass {
+    fn from(value: ::core::ffi::c_int) -> EmptyClass {
         EmptyClass(value)
     }
 }
-impl From<EmptyClass> for i32 {
-    fn from(value: EmptyClass) -> i32 {
+impl From<EmptyClass> for ::core::ffi::c_int {
+    fn from(value: EmptyClass) -> ::core::ffi::c_int {
         value.0
     }
 }
@@ -185,15 +185,15 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct EmptyIntClass(i32);
+pub struct EmptyIntClass(::core::ffi::c_int);
 impl EmptyIntClass {}
-impl From<i32> for EmptyIntClass {
-    fn from(value: i32) -> EmptyIntClass {
+impl From<::core::ffi::c_int> for EmptyIntClass {
+    fn from(value: ::core::ffi::c_int) -> EmptyIntClass {
         EmptyIntClass(value)
     }
 }
-impl From<EmptyIntClass> for i32 {
-    fn from(value: EmptyIntClass) -> i32 {
+impl From<EmptyIntClass> for ::core::ffi::c_int {
+    fn from(value: EmptyIntClass) -> ::core::ffi::c_int {
         value.0
     }
 }
@@ -233,18 +233,18 @@
 
 #[repr(transparent)]
 #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash, PartialOrd, Ord)]
-pub struct NonEmptyIntClass(u32);
+pub struct NonEmptyIntClass(::core::ffi::c_uint);
 impl NonEmptyIntClass {
     pub const k1: NonEmptyIntClass = NonEmptyIntClass(0);
     pub const k2: NonEmptyIntClass = NonEmptyIntClass(4294967295);
 }
-impl From<u32> for NonEmptyIntClass {
-    fn from(value: u32) -> NonEmptyIntClass {
+impl From<::core::ffi::c_uint> for NonEmptyIntClass {
+    fn from(value: ::core::ffi::c_uint) -> NonEmptyIntClass {
         NonEmptyIntClass(value)
     }
 }
-impl From<NonEmptyIntClass> for u32 {
-    fn from(value: NonEmptyIntClass) -> u32 {
+impl From<NonEmptyIntClass> for ::core::ffi::c_uint {
+    fn from(value: NonEmptyIntClass) -> ::core::ffi::c_uint {
         value.0
     }
 }
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 3f604bf..41d1184 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
@@ -23,7 +23,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct r#type {
-    pub r#dyn: i32,
+    pub r#dyn: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("type"), crate::r#type);
 
@@ -68,7 +68,7 @@
 }
 
 #[inline(always)]
-pub fn r#impl(r#match: i32) {
+pub fn r#impl(r#match: ::core::ffi::c_int) {
     unsafe { crate::detail::__rust_thunk___Z4impli(r#match) }
 }
 
@@ -100,7 +100,7 @@
             __param_0: ::ctor::RvalueReference<'b, crate::r#type>,
         ) -> &'a mut crate::r#type;
         #[link_name = "_Z4impli"]
-        pub(crate) fn __rust_thunk___Z4impli(r#match: i32);
+        pub(crate) fn __rust_thunk___Z4impli(r#match: ::core::ffi::c_int);
     }
 }
 
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 699a941..005ca17 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
@@ -93,7 +93,7 @@
 /// Uint128Low64 declarations from absl/numeric/int128.h.  This is a
 /// regression test for b/244311755.
 #[inline(always)]
-pub fn multiple_declarations<'a>(__param_0: &'a crate::SomeClass) -> i32 {
+pub fn multiple_declarations<'a>(__param_0: &'a crate::SomeClass) -> ::core::ffi::c_int {
     unsafe { crate::detail::__rust_thunk___Z21multiple_declarationsRK9SomeClass(__param_0) }
 }
 
@@ -133,7 +133,7 @@
         );
         pub(crate) fn __rust_thunk___Z21multiple_declarationsRK9SomeClass<'a>(
             __param_0: &'a crate::SomeClass,
-        ) -> i32;
+        ) -> ::core::ffi::c_int;
     }
 }
 
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 dc7e44b..14a235c 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
@@ -23,7 +23,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct FirstStruct {
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("FirstStruct"), crate::FirstStruct);
 
@@ -68,14 +68,14 @@
 }
 
 #[inline(always)]
-pub fn first_func() -> i32 {
+pub fn first_func() -> ::core::ffi::c_int {
     unsafe { crate::detail::__rust_thunk___Z10first_funcv() }
 }
 
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct SecondStruct {
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("SecondStruct"), crate::SecondStruct);
 
@@ -120,7 +120,7 @@
 }
 
 #[inline(always)]
-pub fn second_func() -> i32 {
+pub fn second_func() -> ::core::ffi::c_int {
     unsafe { crate::detail::__rust_thunk___Z11second_funcv() }
 }
 
@@ -145,7 +145,7 @@
             __this: &'a mut crate::FirstStruct,
             __param_0: ::ctor::RvalueReference<'b, crate::FirstStruct>,
         ) -> &'a mut crate::FirstStruct;
-        pub(crate) fn __rust_thunk___Z10first_funcv() -> i32;
+        pub(crate) fn __rust_thunk___Z10first_funcv() -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN12SecondStructC1Ev<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::SecondStruct>,
         );
@@ -161,7 +161,7 @@
             __this: &'a mut crate::SecondStruct,
             __param_0: ::ctor::RvalueReference<'b, crate::SecondStruct>,
         ) -> &'a mut crate::SecondStruct;
-        pub(crate) fn __rust_thunk___Z11second_funcv() -> i32;
+        pub(crate) fn __rust_thunk___Z11second_funcv() -> ::core::ffi::c_int;
     }
 }
 
diff --git a/rs_bindings_from_cc/test/golden/lifetimes_rs_api.rs b/rs_bindings_from_cc/test/golden/lifetimes_rs_api.rs
index 9fec5f2..3b62299 100644
--- a/rs_bindings_from_cc/test/golden/lifetimes_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/lifetimes_rs_api.rs
@@ -45,7 +45,7 @@
 }
 
 #[inline(always)]
-pub unsafe fn ConsumeArray(pair: *mut i32) {
+pub unsafe fn ConsumeArray(pair: *mut ::core::ffi::c_int) {
     crate::detail::__rust_thunk___Z12ConsumeArrayPi(pair)
 }
 
@@ -53,7 +53,7 @@
 // Unsupported type 'int[2]': Unsupported clang::Type class 'ConstantArray'
 
 #[inline(always)]
-pub unsafe fn ConsumeArrayWithTypedef(__param_0: *mut i32) {
+pub unsafe fn ConsumeArrayWithTypedef(__param_0: *mut ::core::ffi::c_int) {
     crate::detail::__rust_thunk___Z23ConsumeArrayWithTypedefPi(__param_0)
 }
 
@@ -72,9 +72,11 @@
         #[link_name = "_Z25AddAnotherHookWithTypedefRFvvE"]
         pub(crate) fn __rust_thunk___Z25AddAnotherHookWithTypedefRFvvE(hook: extern "C" fn());
         #[link_name = "_Z12ConsumeArrayPi"]
-        pub(crate) fn __rust_thunk___Z12ConsumeArrayPi(pair: *mut i32);
+        pub(crate) fn __rust_thunk___Z12ConsumeArrayPi(pair: *mut ::core::ffi::c_int);
         #[link_name = "_Z23ConsumeArrayWithTypedefPi"]
-        pub(crate) fn __rust_thunk___Z23ConsumeArrayWithTypedefPi(__param_0: *mut i32);
+        pub(crate) fn __rust_thunk___Z23ConsumeArrayWithTypedefPi(
+            __param_0: *mut ::core::ffi::c_int,
+        );
     }
 }
 
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 315db2a..9562892 100644
--- a/rs_bindings_from_cc/test/golden/namespace_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/namespace_rs_api.rs
@@ -24,7 +24,7 @@
     #[derive(Clone, Copy)]
     #[repr(C)]
     pub struct S {
-        pub i: i32,
+        pub i: ::core::ffi::c_int,
     }
     forward_declare::unsafe_define!(
         forward_declare::symbol!("S"),
@@ -77,7 +77,7 @@
 
     /// Free comment inside namespace
     #[inline(always)]
-    pub fn f(mut s: crate::test_namespace_bindings::S) -> i32 {
+    pub fn f(mut s: crate::test_namespace_bindings::S) -> ::core::ffi::c_int {
         unsafe { crate::detail::__rust_thunk___ZN23test_namespace_bindings1fENS_1SE(&mut s) }
     }
 
@@ -312,7 +312,7 @@
         ) -> &'a mut crate::test_namespace_bindings::S;
         pub(crate) fn __rust_thunk___ZN23test_namespace_bindings1fENS_1SE(
             s: &mut crate::test_namespace_bindings::S,
-        ) -> i32;
+        ) -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN23test_namespace_bindings15inline_functionEv();
         #[link_name = "_ZN23test_namespace_bindings5inner1iEv"]
         pub(crate) fn __rust_thunk___ZN23test_namespace_bindings5inner1iEv();
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 cc70522..ce5646e 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
@@ -21,7 +21,7 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
 #[inline(always)]
-pub unsafe fn free_function(p1: *mut i32) -> *mut i32 {
+pub unsafe fn free_function(p1: *mut ::core::ffi::c_int) -> *mut ::core::ffi::c_int {
     crate::detail::__rust_thunk___Z13free_functionRi(p1)
 }
 
@@ -49,14 +49,22 @@
 
 impl S {
     #[inline(always)]
-    pub unsafe fn const_method(__this: *const Self, p1: *mut i32, p2: *mut i32) -> *mut i32 {
+    pub unsafe fn const_method(
+        __this: *const Self,
+        p1: *mut ::core::ffi::c_int,
+        p2: *mut ::core::ffi::c_int,
+    ) -> *mut ::core::ffi::c_int {
         crate::detail::__rust_thunk___ZNK1S12const_methodERiS0_(__this, p1, p2)
     }
 }
 
 impl S {
     #[inline(always)]
-    pub unsafe fn method(__this: *mut Self, p1: *mut i32, p2: *mut i32) -> *mut i32 {
+    pub unsafe fn method(
+        __this: *mut Self,
+        p1: *mut ::core::ffi::c_int,
+        p2: *mut ::core::ffi::c_int,
+    ) -> *mut ::core::ffi::c_int {
         crate::detail::__rust_thunk___ZN1S6methodERiS0_(__this, p1, p2)
     }
 }
@@ -85,7 +93,7 @@
 }
 
 #[inline(always)]
-pub unsafe fn take_pointer(p: *mut i32) {
+pub unsafe fn take_pointer(p: *mut ::core::ffi::c_int) {
     crate::detail::__rust_thunk___Z12take_pointerPi(p)
 }
 
@@ -124,25 +132,27 @@
     use super::*;
     extern "C" {
         #[link_name = "_Z13free_functionRi"]
-        pub(crate) fn __rust_thunk___Z13free_functionRi(p1: *mut i32) -> *mut i32;
+        pub(crate) fn __rust_thunk___Z13free_functionRi(
+            p1: *mut ::core::ffi::c_int,
+        ) -> *mut ::core::ffi::c_int;
         #[link_name = "_ZNK1S12const_methodERiS0_"]
         pub(crate) fn __rust_thunk___ZNK1S12const_methodERiS0_(
             __this: *const crate::S,
-            p1: *mut i32,
-            p2: *mut i32,
-        ) -> *mut i32;
+            p1: *mut ::core::ffi::c_int,
+            p2: *mut ::core::ffi::c_int,
+        ) -> *mut ::core::ffi::c_int;
         #[link_name = "_ZN1S6methodERiS0_"]
         pub(crate) fn __rust_thunk___ZN1S6methodERiS0_(
             __this: *mut crate::S,
-            p1: *mut i32,
-            p2: *mut i32,
-        ) -> *mut i32;
+            p1: *mut ::core::ffi::c_int,
+            p2: *mut ::core::ffi::c_int,
+        ) -> *mut ::core::ffi::c_int;
         #[link_name = "_ZN44TriviallyCopyableButNontriviallyDestructibleD1Ev"]
         pub(crate) fn __rust_thunk___ZN44TriviallyCopyableButNontriviallyDestructibleD1Ev<'a>(
             __this: ::core::pin::Pin<&'a mut crate::TriviallyCopyableButNontriviallyDestructible>,
         );
         #[link_name = "_Z12take_pointerPi"]
-        pub(crate) fn __rust_thunk___Z12take_pointerPi(p: *mut i32);
+        pub(crate) fn __rust_thunk___Z12take_pointerPi(p: *mut ::core::ffi::c_int);
     }
 }
 
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 c30a0ce..6d19e12 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
@@ -45,8 +45,8 @@
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("Struct"), crate::Struct);
 impl Struct {
-    pub fn field1(&self) -> &i32 {
-        unsafe { &*(&self.field1 as *const _ as *const i32) }
+    pub fn field1(&self) -> &::core::ffi::c_int {
+        unsafe { &*(&self.field1 as *const _ as *const ::core::ffi::c_int) }
     }
     pub fn field2(&self) -> &u8 {
         unsafe { &*(&self.field2 as *const _ as *const u8) }
@@ -95,7 +95,7 @@
 
 impl Struct {
     #[inline(always)]
-    pub fn Make(f1: i32, f2: u8) -> crate::Struct {
+    pub fn Make(f1: ::core::ffi::c_int, f2: u8) -> crate::Struct {
         unsafe {
             let mut __return = ::core::mem::MaybeUninit::<Self>::uninit();
             crate::detail::__rust_thunk___ZN6Struct4MakeEic(&mut __return, f1, f2);
@@ -126,8 +126,8 @@
     crate::PaddingBetweenFields
 );
 impl PaddingBetweenFields {
-    pub fn field2(&self) -> &i32 {
-        unsafe { &*(&self.field2 as *const _ as *const i32) }
+    pub fn field2(&self) -> &::core::ffi::c_int {
+        unsafe { &*(&self.field2 as *const _ as *const ::core::ffi::c_int) }
     }
 }
 
@@ -173,7 +173,7 @@
 
 impl PaddingBetweenFields {
     #[inline(always)]
-    pub fn Make(f1: u8, f2: i32) -> crate::PaddingBetweenFields {
+    pub fn Make(f1: u8, f2: ::core::ffi::c_int) -> crate::PaddingBetweenFields {
         unsafe {
             let mut __return = ::core::mem::MaybeUninit::<Self>::uninit();
             crate::detail::__rust_thunk___ZN20PaddingBetweenFields4MakeEci(&mut __return, f1, f2);
@@ -191,7 +191,7 @@
 #[repr(C)]
 pub struct FieldInTailPadding_InnerStruct {
     /// size: 4, alignment: 4 => offset: 0
-    pub inner_int_field: i32,
+    pub inner_int_field: ::core::ffi::c_int,
     /// size: 1, alignment: 1 => offset: 4
     pub inner_char_field: u8,
 }
@@ -373,10 +373,10 @@
     }
 }
 
-impl ::ctor::CtorNew<(i32, u8, u8)> for FieldInTailPadding {
+impl ::ctor::CtorNew<(::core::ffi::c_int, u8, u8)> for FieldInTailPadding {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: (i32, u8, u8)) -> Self::CtorType {
+    fn ctor_new(args: (::core::ffi::c_int, u8, u8)) -> Self::CtorType {
         let (inner_int, inner_char, outer_char) = args;
         unsafe {
             ::ctor::FnCtor::new(
@@ -416,7 +416,7 @@
         ) -> &'a mut crate::Struct;
         pub(crate) fn __rust_thunk___ZN6Struct4MakeEic(
             __return: &mut ::core::mem::MaybeUninit<crate::Struct>,
-            f1: i32,
+            f1: ::core::ffi::c_int,
             f2: u8,
         );
         pub(crate) fn __rust_thunk___ZN20PaddingBetweenFieldsC1Ev<'a>(
@@ -437,7 +437,7 @@
         pub(crate) fn __rust_thunk___ZN20PaddingBetweenFields4MakeEci(
             __return: &mut ::core::mem::MaybeUninit<crate::PaddingBetweenFields>,
             f1: u8,
-            f2: i32,
+            f2: ::core::ffi::c_int,
         );
         pub(crate) fn __rust_thunk___ZN30FieldInTailPadding_InnerStructC1Ev<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::FieldInTailPadding_InnerStruct>,
@@ -474,7 +474,7 @@
         ) -> ::core::pin::Pin<&'a mut crate::FieldInTailPadding>;
         pub(crate) fn __rust_thunk___ZN18FieldInTailPaddingC1Eicc<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::FieldInTailPadding>,
-            inner_int: i32,
+            inner_int: ::core::ffi::c_int,
             inner_char: u8,
             outer_char: u8,
         );
@@ -524,7 +524,7 @@
 const _: () =
     assert!(memoffset::offset_of!(crate::FieldInTailPadding_InnerStruct, inner_char_field) == 4);
 const _: () = {
-    static_assertions::assert_impl_all!(i32:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_int:Copy);
 };
 const _: () = {
     static_assertions::assert_impl_all!(u8:Copy);
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 a76580e..d1fb229 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
@@ -35,7 +35,7 @@
 #[repr(C)]
 pub struct Nontrivial {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("Nontrivial"), crate::Nontrivial);
 
@@ -56,10 +56,10 @@
     }
 }
 
-impl ::ctor::CtorNew<i32> for Nontrivial {
+impl ::ctor::CtorNew<::core::ffi::c_int> for Nontrivial {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: i32) -> Self::CtorType {
+    fn ctor_new(args: ::core::ffi::c_int) -> Self::CtorType {
         let field = args;
         unsafe {
             ::ctor::FnCtor::new(
@@ -73,19 +73,19 @@
         }
     }
 }
-impl ::ctor::CtorNew<(i32,)> for Nontrivial {
+impl ::ctor::CtorNew<(::core::ffi::c_int,)> for Nontrivial {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: (i32,)) -> Self::CtorType {
+    fn ctor_new(args: (::core::ffi::c_int,)) -> Self::CtorType {
         let (arg,) = args;
-        <Self as ::ctor::CtorNew<i32>>::ctor_new(arg)
+        <Self as ::ctor::CtorNew<::core::ffi::c_int>>::ctor_new(arg)
     }
 }
 
-impl ::ctor::CtorNew<(i32, i32)> for Nontrivial {
+impl ::ctor::CtorNew<(::core::ffi::c_int, ::core::ffi::c_int)> for Nontrivial {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: (i32, i32)) -> Self::CtorType {
+    fn ctor_new(args: (::core::ffi::c_int, ::core::ffi::c_int)) -> Self::CtorType {
         let (field, unused) = args;
         unsafe {
             ::ctor::FnCtor::new(
@@ -174,9 +174,9 @@
     }
 }
 
-impl ::ctor::Assign<i32> for Nontrivial {
+impl ::ctor::Assign<::core::ffi::c_int> for Nontrivial {
     #[inline(always)]
-    fn assign<'a>(self: ::core::pin::Pin<&'a mut Self>, __param_0: i32) {
+    fn assign<'a>(self: ::core::pin::Pin<&'a mut Self>, __param_0: ::core::ffi::c_int) {
         unsafe {
             crate::detail::__rust_thunk___ZN10NontrivialaSEi(self, __param_0);
         }
@@ -257,7 +257,7 @@
 #[repr(C)]
 pub struct NontrivialInline {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("NontrivialInline"),
@@ -281,10 +281,10 @@
     }
 }
 
-impl ::ctor::CtorNew<i32> for NontrivialInline {
+impl ::ctor::CtorNew<::core::ffi::c_int> for NontrivialInline {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: i32) -> Self::CtorType {
+    fn ctor_new(args: ::core::ffi::c_int) -> Self::CtorType {
         let field = args;
         unsafe {
             ::ctor::FnCtor::new(
@@ -298,19 +298,19 @@
         }
     }
 }
-impl ::ctor::CtorNew<(i32,)> for NontrivialInline {
+impl ::ctor::CtorNew<(::core::ffi::c_int,)> for NontrivialInline {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: (i32,)) -> Self::CtorType {
+    fn ctor_new(args: (::core::ffi::c_int,)) -> Self::CtorType {
         let (arg,) = args;
-        <Self as ::ctor::CtorNew<i32>>::ctor_new(arg)
+        <Self as ::ctor::CtorNew<::core::ffi::c_int>>::ctor_new(arg)
     }
 }
 
-impl ::ctor::CtorNew<(i32, i32)> for NontrivialInline {
+impl ::ctor::CtorNew<(::core::ffi::c_int, ::core::ffi::c_int)> for NontrivialInline {
     type CtorType = impl ::ctor::Ctor<Output = Self>;
     #[inline(always)]
-    fn ctor_new(args: (i32, i32)) -> Self::CtorType {
+    fn ctor_new(args: (::core::ffi::c_int, ::core::ffi::c_int)) -> Self::CtorType {
         let (field, unused) = args;
         unsafe {
             ::ctor::FnCtor::new(
@@ -399,9 +399,9 @@
     }
 }
 
-impl ::ctor::Assign<i32> for NontrivialInline {
+impl ::ctor::Assign<::core::ffi::c_int> for NontrivialInline {
     #[inline(always)]
-    fn assign<'a>(self: ::core::pin::Pin<&'a mut Self>, __param_0: i32) {
+    fn assign<'a>(self: ::core::pin::Pin<&'a mut Self>, __param_0: ::core::ffi::c_int) {
         unsafe {
             crate::detail::__rust_thunk___ZN16NontrivialInlineaSEi(self, __param_0);
         }
@@ -538,7 +538,7 @@
 #[repr(C)]
 pub struct NontrivialUnpin {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("NontrivialUnpin"),
@@ -556,9 +556,9 @@
     }
 }
 
-impl From<i32> for NontrivialUnpin {
+impl From<::core::ffi::c_int> for NontrivialUnpin {
     #[inline(always)]
-    fn from(field: i32) -> Self {
+    fn from(field: ::core::ffi::c_int) -> Self {
         let mut tmp = ::core::mem::MaybeUninit::<Self>::zeroed();
         unsafe {
             crate::detail::__rust_thunk___ZN15NontrivialUnpinC1Ei(&mut tmp, field);
@@ -621,9 +621,9 @@
     }
 }
 
-impl ::ctor::UnpinAssign<i32> for NontrivialUnpin {
+impl ::ctor::UnpinAssign<::core::ffi::c_int> for NontrivialUnpin {
     #[inline(always)]
-    fn unpin_assign<'a>(&'a mut self, __param_0: i32) {
+    fn unpin_assign<'a>(&'a mut self, __param_0: ::core::ffi::c_int) {
         unsafe {
             crate::detail::__rust_thunk___ZN15NontrivialUnpinaSEi(self, __param_0);
         }
@@ -927,13 +927,13 @@
         #[link_name = "_ZN10NontrivialC1Ei"]
         pub(crate) fn __rust_thunk___ZN10NontrivialC1Ei<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::Nontrivial>,
-            field: i32,
+            field: ::core::ffi::c_int,
         );
         #[link_name = "_ZN10NontrivialC1Eii"]
         pub(crate) fn __rust_thunk___ZN10NontrivialC1Eii<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::Nontrivial>,
-            field: i32,
-            unused: i32,
+            field: ::core::ffi::c_int,
+            unused: ::core::ffi::c_int,
         );
         #[link_name = "_ZN10NontrivialC1ERKS_"]
         pub(crate) fn __rust_thunk___ZN10NontrivialC1ERKS_<'a, 'b>(
@@ -958,7 +958,7 @@
         #[link_name = "_ZN10NontrivialaSEi"]
         pub(crate) fn __rust_thunk___ZN10NontrivialaSEi<'a>(
             __this: ::core::pin::Pin<&'a mut crate::Nontrivial>,
-            __param_0: i32,
+            __param_0: ::core::ffi::c_int,
         ) -> ::core::pin::Pin<&'a mut crate::Nontrivial>;
         pub(crate) fn __rust_thunk___ZN10NontrivialaSEf<'a>(
             __return: &mut ::core::mem::MaybeUninit<crate::Nontrivial>,
@@ -998,12 +998,12 @@
         );
         pub(crate) fn __rust_thunk___ZN16NontrivialInlineC1Ei<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::NontrivialInline>,
-            field: i32,
+            field: ::core::ffi::c_int,
         );
         pub(crate) fn __rust_thunk___ZN16NontrivialInlineC1Eii<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::NontrivialInline>,
-            field: i32,
-            unused: i32,
+            field: ::core::ffi::c_int,
+            unused: ::core::ffi::c_int,
         );
         pub(crate) fn __rust_thunk___ZN16NontrivialInlineC1ERKS_<'a, 'b>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::NontrivialInline>,
@@ -1023,7 +1023,7 @@
         ) -> ::core::pin::Pin<&'a mut crate::NontrivialInline>;
         pub(crate) fn __rust_thunk___ZN16NontrivialInlineaSEi<'a>(
             __this: ::core::pin::Pin<&'a mut crate::NontrivialInline>,
-            __param_0: i32,
+            __param_0: ::core::ffi::c_int,
         ) -> ::core::pin::Pin<&'a mut crate::NontrivialInline>;
         pub(crate) fn __rust_thunk___ZN16NontrivialInlineD1Ev<'a>(
             __this: ::core::pin::Pin<&'a mut crate::NontrivialInline>,
@@ -1060,7 +1060,7 @@
         #[link_name = "_ZN15NontrivialUnpinC1Ei"]
         pub(crate) fn __rust_thunk___ZN15NontrivialUnpinC1Ei<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::NontrivialUnpin>,
-            field: i32,
+            field: ::core::ffi::c_int,
         );
         #[link_name = "_ZN15NontrivialUnpinC1ERKS_"]
         pub(crate) fn __rust_thunk___ZN15NontrivialUnpinC1ERKS_<'a, 'b>(
@@ -1090,7 +1090,7 @@
         #[link_name = "_ZN15NontrivialUnpinaSEi"]
         pub(crate) fn __rust_thunk___ZN15NontrivialUnpinaSEi<'a>(
             __this: &'a mut crate::NontrivialUnpin,
-            __param_0: i32,
+            __param_0: ::core::ffi::c_int,
         ) -> &'a mut crate::NontrivialUnpin;
         #[link_name = "_ZN15NontrivialUnpinD1Ev"]
         pub(crate) fn __rust_thunk___ZN15NontrivialUnpinD1Ev<'a>(
@@ -1195,7 +1195,7 @@
 };
 const _: () = assert!(memoffset::offset_of!(crate::Nontrivial, field) == 0);
 const _: () = {
-    static_assertions::assert_impl_all!(i32:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_int:Copy);
 };
 
 const _: () = assert!(::core::mem::size_of::<crate::NontrivialInline>() == 4);
@@ -1208,7 +1208,7 @@
 };
 const _: () = assert!(memoffset::offset_of!(crate::NontrivialInline, field) == 0);
 const _: () = {
-    static_assertions::assert_impl_all!(i32:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_int:Copy);
 };
 
 const _: () = assert!(::core::mem::size_of::<crate::NontrivialMembers>() == 4);
@@ -1231,7 +1231,7 @@
 };
 const _: () = assert!(memoffset::offset_of!(crate::NontrivialUnpin, field) == 0);
 const _: () = {
-    static_assertions::assert_impl_all!(i32:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_int:Copy);
 };
 
 const _: () = assert!(::core::mem::size_of::<crate::NontrivialByValue>() == 1);
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 62a6a15..b3a31a2 100644
--- a/rs_bindings_from_cc/test/golden/operators_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/operators_rs_api.rs
@@ -517,18 +517,18 @@
     }
 }
 
-impl<'a> ::core::ops::Add<i32> for &'a crate::Overloaded {
-    type Output = i32;
+impl<'a> ::core::ops::Add<::core::ffi::c_int> for &'a crate::Overloaded {
+    type Output = ::core::ffi::c_int;
     #[inline(always)]
-    fn add(self, rhs: i32) -> Self::Output {
+    fn add(self, rhs: ::core::ffi::c_int) -> Self::Output {
         unsafe { crate::detail::__rust_thunk___ZplRK10Overloadedi(self, rhs) }
     }
 }
 
-impl<'a> ::core::ops::Add<u32> for &'a crate::Overloaded {
-    type Output = i32;
+impl<'a> ::core::ops::Add<::core::ffi::c_uint> for &'a crate::Overloaded {
+    type Output = ::core::ffi::c_int;
     #[inline(always)]
-    fn add(self, rhs: u32) -> Self::Output {
+    fn add(self, rhs: ::core::ffi::c_uint) -> Self::Output {
         unsafe { crate::detail::__rust_thunk___ZplRK10Overloadedj(self, rhs) }
     }
 }
@@ -796,9 +796,9 @@
     }
 }
 
-impl ::core::ops::AddAssign<i32> for AddAssignMemberInt {
+impl ::core::ops::AddAssign<::core::ffi::c_int> for AddAssignMemberInt {
     #[inline(always)]
-    fn add_assign<'a>(&'a mut self, rhs: i32) {
+    fn add_assign<'a>(&'a mut self, rhs: ::core::ffi::c_int) {
         unsafe {
             crate::detail::__rust_thunk___ZN18AddAssignMemberIntpLEi(self, rhs);
         }
@@ -1649,13 +1649,13 @@
         #[link_name = "_ZplRK10Overloadedi"]
         pub(crate) fn __rust_thunk___ZplRK10Overloadedi<'a>(
             lhs: &'a crate::Overloaded,
-            rhs: i32,
-        ) -> i32;
+            rhs: ::core::ffi::c_int,
+        ) -> ::core::ffi::c_int;
         #[link_name = "_ZplRK10Overloadedj"]
         pub(crate) fn __rust_thunk___ZplRK10Overloadedj<'a>(
             lhs: &'a crate::Overloaded,
-            rhs: u32,
-        ) -> i32;
+            rhs: ::core::ffi::c_uint,
+        ) -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN15IncompatibleLHSC1Ev<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::IncompatibleLHS>,
         );
@@ -1728,8 +1728,8 @@
         #[link_name = "_ZN18AddAssignMemberIntpLEi"]
         pub(crate) fn __rust_thunk___ZN18AddAssignMemberIntpLEi<'a>(
             __this: &'a mut crate::AddAssignMemberInt,
-            rhs: i32,
-        ) -> i32;
+            rhs: ::core::ffi::c_int,
+        ) -> ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN25AddAssignMemberByConstRefC1Ev<'a>(
             __this: &'a mut ::core::mem::MaybeUninit<crate::AddAssignMemberByConstRef>,
         );
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 71aec09..2df75fa 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
@@ -25,7 +25,7 @@
     #[repr(C, align(4))]
     pub struct SomeClass {
         __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-        pub public_member_variable_: i32,
+        pub public_member_variable_: ::core::ffi::c_int,
         /// Reason for representing this field as a blob of bytes:
         /// Types of non-public C++ fields can be elided away
         pub(crate) private_member_variable_: [::core::mem::MaybeUninit<u8>; 4],
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 7334caa..ac81ef7 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
@@ -73,7 +73,7 @@
 impl SomeClass {
     /// Example of a factory method.
     #[inline(always)]
-    pub fn static_factory_method(initial_value_of_field: i32) -> crate::SomeClass {
+    pub fn static_factory_method(initial_value_of_field: ::core::ffi::c_int) -> crate::SomeClass {
         unsafe {
             let mut __return = ::core::mem::MaybeUninit::<Self>::uninit();
             crate::detail::__rust_thunk___ZN9SomeClass21static_factory_methodEi(
@@ -88,7 +88,10 @@
 impl SomeClass {
     /// Static method working on primitive types (and unrelated to the struct).
     #[inline(always)]
-    pub fn static_method_that_multiplies_its_args(x: i32, y: i32) -> i32 {
+    pub fn static_method_that_multiplies_its_args(
+        x: ::core::ffi::c_int,
+        y: ::core::ffi::c_int,
+    ) -> ::core::ffi::c_int {
         unsafe {
             crate::detail::__rust_thunk___ZN9SomeClass38static_method_that_multiplies_its_argsEii(
                 x, y,
@@ -120,13 +123,13 @@
         ) -> &'a mut crate::SomeClass;
         pub(crate) fn __rust_thunk___ZN9SomeClass21static_factory_methodEi(
             __return: &mut ::core::mem::MaybeUninit<crate::SomeClass>,
-            initial_value_of_field: i32,
+            initial_value_of_field: ::core::ffi::c_int,
         );
         #[link_name = "_ZN9SomeClass38static_method_that_multiplies_its_argsEii"]
         pub(crate) fn __rust_thunk___ZN9SomeClass38static_method_that_multiplies_its_argsEii(
-            x: i32,
-            y: i32,
-        ) -> i32;
+            x: ::core::ffi::c_int,
+            y: ::core::ffi::c_int,
+        ) -> ::core::ffi::c_int;
     }
 }
 
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 05070f8..1ad275c 100644
--- a/rs_bindings_from_cc/test/golden/templates_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/templates_rs_api.rs
@@ -534,7 +534,9 @@
 
 impl __CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE {
     #[inline(always)]
-    pub fn Create(value: i32) -> crate::__CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE {
+    pub fn Create(
+        value: ::core::ffi::c_int,
+    ) -> crate::__CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE {
         unsafe {
             let mut __return = ::core::mem::MaybeUninit::<Self>::uninit();
             crate::detail::__rust_thunk___ZN23test_namespace_bindings10MyTemplateIiE6CreateEi__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(&mut __return,value);
@@ -545,7 +547,7 @@
 
 impl __CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE {
     #[inline(always)]
-    pub fn value<'a>(&'a self) -> &'a i32 {
+    pub fn value<'a>(&'a self) -> &'a ::core::ffi::c_int {
         unsafe {
             crate::detail::__rust_thunk___ZNK23test_namespace_bindings10MyTemplateIiE5valueEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc(self)
         }
@@ -556,7 +558,7 @@
 #[repr(C)]
 pub struct __CcTemplateInstN23test_namespace_bindings21TemplateWithTwoParamsINS0_IiiEEiEE {
     pub value1: crate::__CcTemplateInstN23test_namespace_bindings21TemplateWithTwoParamsIiiEE,
-    pub value2: i32,
+    pub value2: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!(
@@ -614,7 +616,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct __CcTemplateInstN23test_namespace_bindings21TemplateWithTwoParamsIifEE {
-    pub value1: i32,
+    pub value1: ::core::ffi::c_int,
     pub value2: f32,
 }
 forward_declare::unsafe_define!(
@@ -671,8 +673,8 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct __CcTemplateInstN23test_namespace_bindings21TemplateWithTwoParamsIiiEE {
-    pub value1: i32,
-    pub value2: i32,
+    pub value1: ::core::ffi::c_int,
+    pub value2: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("test_namespace_bindings::TemplateWithTwoParams<int, int>"),
@@ -991,7 +993,7 @@
 
 impl __CcTemplateInstN24template_template_params10MyTemplateINS_6PolicyEEE {
     #[inline(always)]
-    pub fn GetPolicy() -> i32 {
+    pub fn GetPolicy() -> ::core::ffi::c_int {
         unsafe {
             crate::detail::__rust_thunk___ZN24template_template_params10MyTemplateINS_6PolicyEE9GetPolicyEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc()
         }
@@ -1175,13 +1177,13 @@
             __return: &mut ::core::mem::MaybeUninit<
                 crate::__CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE,
             >,
-            value: i32,
+            value: ::core::ffi::c_int,
         );
         pub(crate) fn __rust_thunk___ZNK23test_namespace_bindings10MyTemplateIiE5valueEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc<
             'a,
         >(
             __this: &'a crate::__CcTemplateInstN23test_namespace_bindings10MyTemplateIiEE,
-        ) -> &'a i32;
+        ) -> &'a ::core::ffi::c_int;
         pub(crate) fn __rust_thunk___ZN23test_namespace_bindings21TemplateWithTwoParamsINS0_IiiEEiEC1Ev__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc<
             'a,
         >(
@@ -1381,7 +1383,7 @@
             &'a mut crate::__CcTemplateInstN24template_template_params10MyTemplateINS_6PolicyEEE,
         >;
         pub(crate) fn __rust_thunk___ZN24template_template_params10MyTemplateINS_6PolicyEE9GetPolicyEv__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fcc()
-        -> i32;
+        -> ::core::ffi::c_int;
     }
 }
 
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 89ce32f..5101277 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
@@ -410,7 +410,7 @@
 
 impl __CcTemplateInst10MyTemplateIiE {
     #[inline(always)]
-    pub unsafe fn processT(__this: *mut Self, t: i32) {
+    pub unsafe fn processT(__this: *mut Self, t: ::core::ffi::c_int) {
         crate::detail::__rust_thunk___ZN10MyTemplateIiE8processTEi__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(__this,t)
     }
 }
@@ -453,7 +453,7 @@
         );
         pub(crate) fn __rust_thunk___ZN10MyTemplateIiE8processTEi__2f_2fthird_5fparty_2fcrubit_2frs_5fbindings_5ffrom_5fcc_2ftest_2fgolden_3atemplates_5fsource_5forder_5fcc(
             __this: *mut crate::__CcTemplateInst10MyTemplateIiE,
-            t: i32,
+            t: ::core::ffi::c_int,
         );
     }
 }
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 6b25647..5188e8c 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
@@ -32,7 +32,7 @@
     #[derive(Clone, Copy)]
     #[repr(C)]
     pub struct Trivial {
-        pub trivial_field: i32,
+        pub trivial_field: ::core::ffi::c_int,
     }
     forward_declare::unsafe_define!(forward_declare::symbol!("Trivial"), crate::ns::Trivial);
 
@@ -127,7 +127,7 @@
     #[::ctor::recursively_pinned]
     #[repr(C)]
     pub struct TrivialNonfinal {
-        pub trivial_field: i32,
+        pub trivial_field: ::core::ffi::c_int,
     }
     forward_declare::unsafe_define!(
         forward_declare::symbol!("TrivialNonfinal"),
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 db08a8e..5346970 100644
--- a/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/typedefs_rs_api.rs
@@ -326,7 +326,7 @@
 }
 
 #[inline(always)]
-pub fn FunctionUsingNestedType() -> i32 {
+pub fn FunctionUsingNestedType() -> ::core::ffi::c_int {
     unsafe { crate::detail::__rust_thunk___Z23FunctionUsingNestedTypev() }
 }
 
@@ -405,7 +405,7 @@
             __param_0: ::ctor::RvalueReference<'b, crate::SomeOtherUnion>,
         ) -> &'a mut crate::SomeOtherUnion;
         #[link_name = "_Z23FunctionUsingNestedTypev"]
-        pub(crate) fn __rust_thunk___Z23FunctionUsingNestedTypev() -> i32;
+        pub(crate) fn __rust_thunk___Z23FunctionUsingNestedTypev() -> ::core::ffi::c_int;
     }
 }
 
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 f7fe7e5..82e9f29 100644
--- a/rs_bindings_from_cc/test/golden/types_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/types_rs_api.rs
@@ -80,23 +80,23 @@
 pub struct FieldTypeTestStruct {
     pub bool_field: bool,
     pub char_field: u8,
-    pub unsigned_char_field: u8,
-    pub signed_char_field: i8,
+    pub unsigned_char_field: ::core::ffi::c_uchar,
+    pub signed_char_field: ::core::ffi::c_schar,
     pub char16_t_field: u16,
     pub char32_t_field: u32,
     pub wchar_t_field: i32,
-    pub short_field: i16,
-    pub int_field: i32,
-    pub long_field: i64,
-    pub long_long_field: i64,
-    pub unsigned_short_field: u16,
-    pub unsigned_int_field: u32,
-    pub unsigned_long_field: u64,
-    pub unsigned_long_long_field: u64,
-    pub signed_short_field: i16,
-    pub signed_int_field: i32,
-    pub signed_long_field: i64,
-    pub signed_long_long_field: i64,
+    pub short_field: ::core::ffi::c_short,
+    pub int_field: ::core::ffi::c_int,
+    pub long_field: ::core::ffi::c_long,
+    pub long_long_field: ::core::ffi::c_longlong,
+    pub unsigned_short_field: ::core::ffi::c_ushort,
+    pub unsigned_int_field: ::core::ffi::c_uint,
+    pub unsigned_long_field: ::core::ffi::c_ulong,
+    pub unsigned_long_long_field: ::core::ffi::c_ulonglong,
+    pub signed_short_field: ::core::ffi::c_short,
+    pub signed_int_field: ::core::ffi::c_int,
+    pub signed_long_field: ::core::ffi::c_long,
+    pub signed_long_long_field: ::core::ffi::c_longlong,
     /// Reason for representing this field as a blob of bytes:
     /// Unsupported type 'PtrDiff': No generated bindings found for 'PtrDiff'
     pub(crate) ptrdiff_t_field: [::core::mem::MaybeUninit<u8>; 8],
@@ -105,7 +105,7 @@
     pub(crate) size_t_field: [::core::mem::MaybeUninit<u8>; 8],
     pub float_field: f32,
     pub double_field: f64,
-    pub ptr_field: *mut i32,
+    pub ptr_field: *mut ::core::ffi::c_int,
     pub void_ptr_field: *mut ::core::ffi::c_void,
     pub const_void_ptr_field: *const ::core::ffi::c_void,
     pub void_double_ptr_field: *mut *mut ::core::ffi::c_void,
@@ -145,8 +145,9 @@
 /// returning a function. In ML-like syntax:
 /// FunctionPointerReturningFunction : () -> (const int&, int*) -> int&
 #[inline(always)]
-pub fn FunctionPointerReturningFunction() -> Option<extern "C" fn(*const i32, *mut i32) -> *mut i32>
-{
+pub fn FunctionPointerReturningFunction() -> Option<
+    extern "C" fn(*const ::core::ffi::c_int, *mut ::core::ffi::c_int) -> *mut ::core::ffi::c_int,
+> {
     unsafe { crate::detail::__rust_thunk___Z32FunctionPointerReturningFunctionv() }
 }
 
@@ -200,8 +201,12 @@
             __param_0: ::ctor::RvalueReference<'b, crate::FieldTypeTestStruct>,
         );
         pub(crate) fn __rust_thunk___Z21VoidReturningFunctionv();
-        pub(crate) fn __rust_thunk___Z32FunctionPointerReturningFunctionv()
-        -> Option<extern "C" fn(*const i32, *mut i32) -> *mut i32>;
+        pub(crate) fn __rust_thunk___Z32FunctionPointerReturningFunctionv() -> Option<
+            extern "C" fn(
+                *const ::core::ffi::c_int,
+                *mut ::core::ffi::c_int,
+            ) -> *mut ::core::ffi::c_int,
+        >;
         pub(crate) fn __rust_thunk___Z24FunctionWithVoidPointersPvPKv(
             __param_0: *mut ::core::ffi::c_void,
             __param_1: *const ::core::ffi::c_void,
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 b5a293a..c0833ec 100644
--- a/rs_bindings_from_cc/test/golden/unions_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/unions_rs_api.rs
@@ -76,7 +76,7 @@
 #[repr(C)]
 pub struct Nontrivial {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-    pub field: i32,
+    pub field: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("Nontrivial"), crate::Nontrivial);
 
@@ -179,8 +179,8 @@
 pub union NonEmptyUnion {
     pub bool_field: bool,
     pub char_field: u8,
-    pub int_field: i32,
-    pub long_long_field: i64,
+    pub int_field: ::core::ffi::c_int,
+    pub long_long_field: ::core::ffi::c_longlong,
 }
 forward_declare::unsafe_define!(forward_declare::symbol!("NonEmptyUnion"), crate::NonEmptyUnion);
 
@@ -323,7 +323,7 @@
 #[::ctor::recursively_pinned]
 #[repr(C)]
 pub struct TrivialButInheritable {
-    pub x: i32,
+    pub x: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("TrivialButInheritable"),
@@ -882,10 +882,10 @@
     static_assertions::assert_impl_all!(u8:Copy);
 };
 const _: () = {
-    static_assertions::assert_impl_all!(i32:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_int:Copy);
 };
 const _: () = {
-    static_assertions::assert_impl_all!(i64:Copy);
+    static_assertions::assert_impl_all!(::core::ffi::c_longlong:Copy);
 };
 
 const _: () = assert!(::core::mem::size_of::<crate::NonCopyUnion>() == 4);
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 5939b74..dbb4fd2 100644
--- a/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs
+++ b/rs_bindings_from_cc/test/golden/unsupported_rs_api.rs
@@ -28,7 +28,7 @@
 #[derive(Clone, Copy)]
 #[repr(C)]
 pub struct TrivialCustomType {
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("TrivialCustomType"),
@@ -85,7 +85,7 @@
 #[repr(C)]
 pub struct NontrivialCustomType {
     __non_field_data: [::core::mem::MaybeUninit<u8>; 0],
-    pub i: i32,
+    pub i: ::core::ffi::c_int,
 }
 forward_declare::unsafe_define!(
     forward_declare::symbol!("NontrivialCustomType"),