From 73d9738baf160eb11f420e5a3b612384741fff0a Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 12 Dec 2025 07:13:00 -0800 Subject: [PATCH] Remove migration helper overloads. PiperOrigin-RevId: 843676463 --- .../generate_function_thunk.rs | 9 ++-- .../golden/composable_bridging_cc_api_impl.rs | 53 ++++++++----------- common/crubit_abi_type.rs | 47 ++++++++++++---- .../test/golden/composable_bridging_rs_api.rs | 12 ++--- support/bridge.h | 18 ------- support/bridge.rs | 20 ------- 6 files changed, 69 insertions(+), 90 deletions(-) diff --git a/cc_bindings_from_rs/generate_bindings/generate_function_thunk.rs b/cc_bindings_from_rs/generate_bindings/generate_function_thunk.rs index 92c61e315..0ebe55c35 100644 --- a/cc_bindings_from_rs/generate_bindings/generate_function_thunk.rs +++ b/cc_bindings_from_rs/generate_bindings/generate_function_thunk.rs @@ -11,7 +11,7 @@ use arc_anyhow::{Context, Result}; use code_gen_utils::escape_non_identifier_chars; use code_gen_utils::make_rs_ident; use code_gen_utils::CcConstQualifier; -use crubit_abi_type::{CrubitAbiTypeToRustExprTokens, CrubitAbiTypeToRustTokens}; +use crubit_abi_type::CrubitAbiTypeToRustExprTokens; use database::code_snippet::{CcPrerequisites, CcSnippet, ExternCDecl}; use database::{AdtCoreBindings, BindingsGenerator, SugaredTy}; use error_report::{anyhow, bail, ensure}; @@ -222,12 +222,11 @@ fn convert_bridged_type_from_c_abi_to_rust<'tcx>( }) } BridgedType::Composable(composable) => { - let crubit_abi_type = CrubitAbiTypeToRustTokens(&composable.crubit_abi_type); let crubit_abi_type_expr = CrubitAbiTypeToRustExprTokens(&composable.crubit_abi_type); // SAFETY: The buffer is the correct size, as determined by Crubit. Ok(quote! { let #local_name = unsafe { - ::bridge_rust::decode_wrapper!(#crubit_abi_type_expr, #crubit_abi_type, #local_name) + ::bridge_rust::internal::decode(#crubit_abi_type_expr, #local_name) }; }) } @@ -415,13 +414,13 @@ fn write_rs_value_to_c_abi_ptr<'tcx>( } }, BridgedType::Composable(composable) => { - let crubit_abi_type = CrubitAbiTypeToRustTokens(&composable.crubit_abi_type); let crubit_abi_type_expr = CrubitAbiTypeToRustExprTokens(&composable.crubit_abi_type); quote! { // SAFETY: TODO(okabayashi) unsafe { - ::bridge_rust::encode_wrapper!(#crubit_abi_type_expr, #crubit_abi_type, + ::bridge_rust::internal::encode( + #crubit_abi_type_expr, // TODO(okabayashi): This ptr case can be removed once tuple bridging is supported, // as it only is required in the tuple recursive case. #c_ptr as *mut core::ffi::c_uchar, diff --git a/cc_bindings_from_rs/test/golden/composable_bridging_cc_api_impl.rs b/cc_bindings_from_rs/test/golden/composable_bridging_cc_api_impl.rs index ae651d50c..8c7855187 100644 --- a/cc_bindings_from_rs/test/golden/composable_bridging_cc_api_impl.rs +++ b/cc_bindings_from_rs/test/golden/composable_bridging_cc_api_impl.rs @@ -15,11 +15,10 @@ unsafe extern "C" fn __crubit_thunk_returns_usome_uint(__ret_ptr: *mut core::ffi unsafe { let __rs_return_value = ::composable_bridging_rust_golden::returns_some_int(); unsafe { - ::bridge_rust::encode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi>, + ::bridge_rust::internal::encode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::()), __ret_ptr as *mut core::ffi::c_uchar, - __rs_return_value + __rs_return_value, ); } } @@ -29,11 +28,10 @@ unsafe extern "C" fn __crubit_thunk_returns_uno_uint(__ret_ptr: *mut core::ffi:: unsafe { let __rs_return_value = ::composable_bridging_rust_golden::returns_no_int(); unsafe { - ::bridge_rust::encode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi>, + ::bridge_rust::internal::encode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::()), __ret_ptr as *mut core::ffi::c_uchar, - __rs_return_value + __rs_return_value, ); } } @@ -42,10 +40,9 @@ unsafe extern "C" fn __crubit_thunk_returns_uno_uint(__ret_ptr: *mut core::ffi:: unsafe extern "C" fn __crubit_thunk_unwrap_uor_uzero(x: *const core::ffi::c_uchar) -> i32 { unsafe { let x = unsafe { - ::bridge_rust::decode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi>, - x + ::bridge_rust::internal::decode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::()), + x, ) }; ::composable_bridging_rust_golden::unwrap_or_zero(x) @@ -58,19 +55,17 @@ unsafe extern "C" fn __crubit_thunk_option_uincrements( ) -> () { unsafe { let x = unsafe { - ::bridge_rust::decode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi>, - x + ::bridge_rust::internal::decode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::()), + x, ) }; let __rs_return_value = ::composable_bridging_rust_golden::option_increments(x); unsafe { - ::bridge_rust::encode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi>, + ::bridge_rust::internal::encode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::()), __ret_ptr as *mut core::ffi::c_uchar, - __rs_return_value + __rs_return_value, ); } } @@ -82,13 +77,12 @@ unsafe extern "C" fn __crubit_thunk_make_umy_uoption_urust( unsafe { let __rs_return_value = ::composable_bridging_rust_golden::make_my_option_rust(); unsafe { - ::bridge_rust::encode_wrapper!( - ::composable_bridging_rust_golden::MyOptionRustAbi(::bridge_rust::transmute_abi()), - ::composable_bridging_rust_golden::MyOptionRustAbi< - ::bridge_rust::TransmuteAbi, - >, + ::bridge_rust::internal::encode( + ::composable_bridging_rust_golden::MyOptionRustAbi(::bridge_rust::transmute_abi::< + i32, + >()), __ret_ptr as *mut core::ffi::c_uchar, - __rs_return_value + __rs_return_value, ); } } @@ -98,11 +92,10 @@ unsafe extern "C" fn __crubit_thunk_maybe_uint_uslice(__ret_ptr: *mut core::ffi: unsafe { let __rs_return_value = ::composable_bridging_rust_golden::maybe_int_slice(); unsafe { - ::bridge_rust::encode_wrapper!( - ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi()), - ::bridge_rust::OptionAbi<::bridge_rust::TransmuteAbi<*const [i32]>>, + ::bridge_rust::internal::encode( + ::bridge_rust::OptionAbi(::bridge_rust::transmute_abi::<*const [i32]>()), __ret_ptr as *mut core::ffi::c_uchar, - __rs_return_value + __rs_return_value, ); } } diff --git a/common/crubit_abi_type.rs b/common/crubit_abi_type.rs index a87e9b983..991c80d4a 100644 --- a/common/crubit_abi_type.rs +++ b/common/crubit_abi_type.rs @@ -204,15 +204,40 @@ impl ToTokens for CrubitAbiTypeToRustTokens<'_> { impl ToTokens for CrubitAbiTypeToRustExprTokens<'_> { fn to_tokens(&self, tokens: &mut TokenStream) { match self.0 { - CrubitAbiType::SignedChar - | CrubitAbiType::UnsignedChar - | CrubitAbiType::UnsignedShort - | CrubitAbiType::UnsignedInt - | CrubitAbiType::UnsignedLong - | CrubitAbiType::LongLong - | CrubitAbiType::UnsignedLongLong - | CrubitAbiType::Ptr { .. } => { - quote! { ::bridge_rust::transmute_abi() }.to_tokens(tokens); + CrubitAbiType::SignedChar => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_schar>() }.to_tokens(tokens) + } + CrubitAbiType::UnsignedChar => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_uchar>() }.to_tokens(tokens) + } + CrubitAbiType::UnsignedShort => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_ushort>() }.to_tokens(tokens) + } + CrubitAbiType::UnsignedInt => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_uint>() }.to_tokens(tokens) + } + CrubitAbiType::UnsignedLong => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_ulong>() }.to_tokens(tokens) + } + CrubitAbiType::LongLong => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_longlong>() } + .to_tokens(tokens) + } + CrubitAbiType::UnsignedLongLong => { + quote! { ::bridge_rust::transmute_abi::<::core::ffi::c_ulonglong>() } + .to_tokens(tokens) + } + CrubitAbiType::Ptr { is_const, is_rust_slice, rust_type, .. } => { + let mut ty = rust_type.clone(); + if *is_rust_slice { + ty = quote! { [#ty] }; + } + if *is_const { + ty = quote! { *const #ty }; + } else { + ty = quote! { *mut #ty }; + } + quote! { ::bridge_rust::transmute_abi::<#ty>() }.to_tokens(tokens); } CrubitAbiType::Pair(first, second) => { let first_tokens = Self(first); @@ -227,8 +252,8 @@ impl ToTokens for CrubitAbiTypeToRustExprTokens<'_> { }; quote! { #root::std::BoxedCppStringAbi }.to_tokens(tokens) } - CrubitAbiType::Transmute { .. } => { - quote! { ::bridge_rust::transmute_abi() }.to_tokens(tokens); + CrubitAbiType::Transmute { rust_type, .. } => { + quote! { ::bridge_rust::transmute_abi::<#rust_type>() }.to_tokens(tokens); } CrubitAbiType::ProtoMessage { proto_message_rust_bridge, .. } => { quote! { #proto_message_rust_bridge(::core::marker::PhantomData) } 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 85c01f0ff..9a0780a79 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 @@ -67,14 +67,14 @@ impl Default for Vec3 { #[inline(always)] pub fn MakeOptionalVec3(x: f32, y: f32, z: f32, is_present: bool) -> crate::MyOption { unsafe { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z16MakeOptionalVec3fffb(__return_abi_buffer,x,y,z,is_present); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z16MakeOptionalVec3fffb(__return_abi_buffer,x,y,z,is_present); }) } } #[inline(always)] pub fn MapMultiply(v: crate::MyOption, factor: f32) -> crate::MyOption { unsafe { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z11MapMultiply8MyOptionI4Vec3Ef(__return_abi_buffer,::bridge_rust::unstable_encode!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,v).as_ptr()as*const u8,factor); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z11MapMultiply8MyOptionI4Vec3Ef(__return_abi_buffer,::bridge_rust::unstable_encode!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,v).as_ptr()as*const u8,factor); }) } } @@ -83,7 +83,7 @@ pub fn MapMultiply(v: crate::MyOption, factor: f32) -> crate::MyOpt #[inline(always)] pub fn MakeMyI8Struct() -> crate::MyOption { unsafe { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z14MakeMyI8Structv(__return_abi_buffer,); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z14MakeMyI8Structv(__return_abi_buffer,); }) } } @@ -97,7 +97,7 @@ pub unsafe fn InspectStringViews( #[inline(always)] pub fn MaybeVoidPtr() -> crate::MyOption<*mut ::core::ffi::c_void> { unsafe { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*mut::core::ffi::c_void>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z12MaybeVoidPtrv(__return_abi_buffer,); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::<*mut::core::ffi::c_void>()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*mut::core::ffi::c_void>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z12MaybeVoidPtrv(__return_abi_buffer,); }) } } @@ -105,13 +105,13 @@ pub fn MaybeVoidPtr() -> crate::MyOption<*mut ::core::ffi::c_void> { pub unsafe fn AcceptsSliceAndReturnsStatusErrorIfEmpty( slice: *const [::core::ffi::c_int], ) -> crate::MyOption<*const [::core::ffi::c_int]> { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*const[::core::ffi::c_int]>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z40AcceptsSliceAndReturnsStatusErrorIfEmptyN6rs_std8SliceRefIKiEE(__return_abi_buffer,slice); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::<*const[::core::ffi::c_int]>()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*const[::core::ffi::c_int]>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z40AcceptsSliceAndReturnsStatusErrorIfEmptyN6rs_std8SliceRefIKiEE(__return_abi_buffer,slice); }) } #[inline(always)] pub fn ReturnsCStrArray() -> crate::MyOption<*mut *const ::core::ffi::c_char> { unsafe { - ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*mut*const::core::ffi::c_char>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z16ReturnsCStrArrayv(__return_abi_buffer,); }) + ::bridge_rust::unstable_return!(@crate::MyOptionAbi(::bridge_rust::transmute_abi::<*mut*const::core::ffi::c_char>()),crate::MyOptionAbi<::bridge_rust::TransmuteAbi<*mut*const::core::ffi::c_char>>,|__return_abi_buffer|{ crate::detail::__rust_thunk___Z16ReturnsCStrArrayv(__return_abi_buffer,); }) } } diff --git a/support/bridge.h b/support/bridge.h index c01d9e567..d4c0ec4d6 100644 --- a/support/bridge.h +++ b/support/bridge.h @@ -362,15 +362,6 @@ void Encode(Abi&& abi, unsigned char* buf, typename Abi::Value value) { std::forward(abi).Encode(std::move(value), encoder); } -// TODO(b/461708400): Remove this overload once deletion of -// http://cc_bindings_from_rs/generate_bindings/generate_function.rs;l=145;rcl=843296833 -// hits crosstool. -template - requires(is_crubit_abi && std::is_default_constructible_v) -void Encode(unsigned char* buf, typename Abi::Value value) { - Encode(Abi(), buf, std::move(value)); -} - template requires(is_crubit_abi) typename Abi::Value Decode(Abi&& abi, const unsigned char* buf) { @@ -378,15 +369,6 @@ typename Abi::Value Decode(Abi&& abi, const unsigned char* buf) { return std::forward(abi).Decode(decoder); } -// TODO(b/461708400): Remove this overload once deletion of -// http://cc_bindings_from_rs/generate_bindings/generate_function.rs;l=289;rcl=836830956 -// hits crosstool. -template - requires(is_crubit_abi && std::is_default_constructible_v) -typename Abi::Value Decode(const unsigned char* buf) { - return Decode(Abi(), buf); -} - } // namespace internal } // namespace crubit diff --git a/support/bridge.rs b/support/bridge.rs index 99713bfeb..065fad462 100644 --- a/support/bridge.rs +++ b/support/bridge.rs @@ -349,26 +349,6 @@ pub mod internal { } } -// Temporary wrapper to migrate all callers of `encode` to the new version which -// takes another argument. -// TODO(b/461708400): Remove this once the migration is complete. -#[macro_export] -macro_rules! encode_wrapper { - {$crubit_abi_expr:expr, $crubit_abi:ty, $buf:expr, $expr:expr} => { - $crate::internal::encode::<$crubit_abi>($crubit_abi_expr, $buf, $expr) - } -} - -// Temporary wrapper to migrate all callers of `decode` to the new version which -// takes another argument. -// TODO(b/461708400): Remove this once the migration is complete. -#[macro_export] -macro_rules! decode_wrapper { - {$crubit_abi_expr:expr, $crubit_abi:ty, $buf:expr} => { - $crate::internal::decode::<$crubit_abi>($crubit_abi_expr, $buf) - } -} - // This cannot be a function because it errors with "constant expression depends on a generic // parameter" when constructing the buffer. // This macro is unstable, and may be changed. Do not use this unless you have been approved by the