Mark no_unique_address field accessors as experimental.
We don't really know how these should look yet, so, yeet.
PiperOrigin-RevId: 604499324
Change-Id: I175d888595b03b5094fca8ae8a339aa299d55917
diff --git a/bazel/llvm.bzl b/bazel/llvm.bzl
index 86c05e8..b0d12c8 100644
--- a/bazel/llvm.bzl
+++ b/bazel/llvm.bzl
@@ -53,7 +53,7 @@
executable = False,
)
-LLVM_COMMIT_SHA = "cca9f9b78fc657c280f7e4024a552af43a315bdb"
+LLVM_COMMIT_SHA = "0f8680b9d87fa9e8839bd8e39ce605d64148ace6"
def llvm_loader_repository_dependencies():
# This *declares* the dependency, but it won't actually be *downloaded* unless it's used.
diff --git a/rs_bindings_from_cc/src_code_gen.rs b/rs_bindings_from_cc/src_code_gen.rs
index 563069e..ce9e48b 100644
--- a/rs_bindings_from_cc/src_code_gen.rs
+++ b/rs_bindings_from_cc/src_code_gen.rs
@@ -2362,7 +2362,6 @@
forward_declare::unsafe_define!(forward_declare::symbol!(#fully_qualified_cc_name), #qualified_ident);
};
- let no_unique_address_accessors = cc_struct_no_unique_address_impl(db, record)?;
let mut record_generated_items = record
.child_item_ids
.iter()
@@ -2383,6 +2382,11 @@
if crubit_features.contains(ir::CrubitFeature::Experimental) {
record_generated_items.push(cc_struct_upcast_impl(record, &ir)?);
}
+ let no_unique_address_accessors = if crubit_features.contains(ir::CrubitFeature::Experimental) {
+ cc_struct_no_unique_address_impl(db, record)?
+ } else {
+ quote! {}
+ };
let mut items = vec![];
let mut thunks_from_record_items = vec![];
@@ -9011,6 +9015,31 @@
Ok(())
}
+ #[test]
+ fn test_extern_c_no_unique_address_field() -> Result<()> {
+ let mut ir = ir_from_cc(
+ r#"
+ struct Struct final {
+ [[no_unique_address]] char field;
+ };
+ "#,
+ )?;
+ *ir.target_crubit_features_mut(&ir.current_target().clone()) =
+ ir::CrubitFeature::ExternC.into();
+ let BindingsTokens { rs_api, .. } = generate_bindings_tokens(ir)?;
+ assert_rs_matches!(
+ rs_api,
+ quote! {
+ pub struct Struct {
+ ...
+ pub(crate) field: [::core::mem::MaybeUninit<u8>; 1],
+ }
+ }
+ );
+ assert_rs_not_matches!(rs_api, quote! {pub fn field});
+ Ok(())
+ }
+
/// The default crubit feature set currently doesn't include extern_c.
#[test]
fn test_default_crubit_features_disabled_extern_c() -> Result<()> {