Skip to content

Commit 44ff95b

Browse files
committed
transpile: Use raw borrows instead of normal borrows
1 parent 1e41cef commit 44ff95b

24 files changed

+115
-69
lines changed

c2rust-transpile/src/translator/mod.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4927,7 +4927,17 @@ impl<'c> Translation<'c> {
49274927
Some(mk().array_ty(mk().ident_ty("u8"), mk().lit_expr(len as u128)));
49284928
}
49294929
needs_cast = true;
4930-
} else {
4930+
}
4931+
// Values that translate into temporaries can't be raw-borrowed in Rust,
4932+
// and must be regular-borrowed first.
4933+
// Borrowing in a static/const context will extend the lifetime to static.
4934+
else if arg_is_macro
4935+
|| ctx.is_static
4936+
&& matches!(
4937+
arg_expr_kind,
4938+
Some(CExprKind::Literal(..) | CExprKind::CompoundLiteral(..))
4939+
)
4940+
{
49314941
let arg_cty_kind = &self.ast_context.resolve_type(arg_cty.ctype).kind;
49324942

49334943
if is_array_decay {
@@ -4957,6 +4967,15 @@ impl<'c> Translation<'c> {
49574967
);
49584968
}
49594969
}
4970+
} else {
4971+
self.use_feature("raw_ref_op");
4972+
val = val.map(|val| mk().set_mutbl(mutbl).raw_borrow_expr(val));
4973+
4974+
if is_array_decay {
4975+
// TODO: Call `ptr::as_[mut]_ptr` instead once that is available.
4976+
// (`array_ptr_get` feature added to nightly in January 2024)
4977+
needs_cast = true;
4978+
}
49604979
}
49614980

49624981
// Perform an intermediate reference-to-pointer cast if needed.

c2rust-transpile/tests/snapshots/snapshots__transpile-aarch64@vm_x86.c.snap

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/arch-specific/vm_x86.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14+
#![feature(raw_ref_op)]
1415
#[derive(Copy, Clone)]
1516
#[repr(C)]
1617
pub struct vm_t {
@@ -42,18 +43,18 @@ pub unsafe extern "C" fn VM_CallCompiled(
4243
programStack -= 8 as ::core::ffi::c_int + 4 as ::core::ffi::c_int * MAX_VMMAIN_ARGS;
4344
arg = 0 as ::core::ffi::c_int;
4445
while arg < MAX_VMMAIN_ARGS {
45-
*(&mut *image.offset(
46+
*(&raw mut *image.offset(
4647
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
47-
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
48+
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
4849
arg += 1;
4950
}
50-
*(&mut *image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
51+
*(&raw mut *image.offset((programStack + 4 as ::core::ffi::c_int) as isize)
5152
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
52-
*(&mut *image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
53+
*(&raw mut *image.offset(programStack as isize) as *mut ::core::ffi::c_int) =
5354
-(1 as ::core::ffi::c_int);
5455
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
55-
opStack =
56-
(stack.as_mut_ptr() as *mut ::core::ffi::c_int).offset(16 as ::core::ffi::c_int as isize);
56+
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
57+
.offset(16 as ::core::ffi::c_int as isize);
5758
*opStack = 0 as ::core::ffi::c_int;
5859
opStackOfs = 0 as ::core::ffi::c_int;
5960
if opStackOfs != 1 as ::core::ffi::c_int

c2rust-transpile/tests/snapshots/snapshots__transpile-x86_64@vm_x86.c.snap

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/arch-specific/vm_x86.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14-
#![feature(asm)]
14+
#![feature(asm, raw_ref_op)]
1515
use ::core::arch::asm;
1616
#[derive(Copy, Clone)]
1717
#[repr(C)]
@@ -44,18 +44,18 @@ pub unsafe extern "C" fn VM_CallCompiled(
4444
programStack -= 8 as ::core::ffi::c_int + 4 as ::core::ffi::c_int * MAX_VMMAIN_ARGS;
4545
arg = 0 as ::core::ffi::c_int;
4646
while arg < MAX_VMMAIN_ARGS {
47-
*(&mut *image.offset(
47+
*(&raw mut *image.offset(
4848
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
49-
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
49+
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
5050
arg += 1;
5151
}
52-
*(&mut *image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
52+
*(&raw mut *image.offset((programStack + 4 as ::core::ffi::c_int) as isize)
5353
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
54-
*(&mut *image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
54+
*(&raw mut *image.offset(programStack as isize) as *mut ::core::ffi::c_int) =
5555
-(1 as ::core::ffi::c_int);
5656
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
57-
opStack =
58-
(stack.as_mut_ptr() as *mut ::core::ffi::c_int).offset(16 as ::core::ffi::c_int as isize);
57+
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
58+
.offset(16 as ::core::ffi::c_int as isize);
5959
*opStack = 0 as ::core::ffi::c_int;
6060
opStackOfs = 0 as ::core::ffi::c_int;
6161
asm!(

c2rust-transpile/tests/snapshots/[email protected]

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/arrays.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14+
#![feature(raw_ref_op)]
1415
#[derive(Copy, Clone)]
1516
#[repr(C)]
1617
pub struct C2RustUnnamed {
@@ -42,7 +43,7 @@ pub static mut static_char_ptr: *mut ::core::ffi::c_char =
4243
b"mystring\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char;
4344
#[no_mangle]
4445
pub static mut static_void_ptr: *mut ::core::ffi::c_void =
45-
unsafe { static_char_array.as_ptr() as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void };
46+
unsafe { &raw const static_char_array as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void };
4647
#[no_mangle]
4748
pub unsafe extern "C" fn entry() {
4849
let mut int_2d: [[::core::ffi::c_int; 1]; 1] = [[1 as ::core::ffi::c_int]];
@@ -84,10 +85,12 @@ pub unsafe extern "C" fn entry() {
8485
::core::mem::transmute::<[u8; 20], [::core::ffi::c_char; 20]>(
8586
*b"abc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
8687
);
87-
let mut int_var_ptr: *mut ::core::ffi::c_int = int_empty_init.as_mut_ptr();
88-
let mut int_var_array_ptr: *mut [::core::ffi::c_int; 16] = &mut int_empty_init;
89-
let mut char_var_ptr: *mut ::core::ffi::c_char = char_with_string.as_mut_ptr();
90-
let mut char_var_array_ptr: *mut [::core::ffi::c_char; 4] = &mut char_with_string;
88+
let mut int_var_ptr: *mut ::core::ffi::c_int =
89+
&raw mut int_empty_init as *mut ::core::ffi::c_int;
90+
let mut int_var_array_ptr: *mut [::core::ffi::c_int; 16] = &raw mut int_empty_init;
91+
let mut char_var_ptr: *mut ::core::ffi::c_char =
92+
&raw mut char_with_string as *mut ::core::ffi::c_char;
93+
let mut char_var_array_ptr: *mut [::core::ffi::c_char; 4] = &raw mut char_with_string;
9194
let mut const_char_lit_ptr: *const ::core::ffi::c_char =
9295
b"abc\0" as *const u8 as *const ::core::ffi::c_char;
9396
let mut const_char_lit_array_ptr: *const [::core::ffi::c_char; 4] =
@@ -97,12 +100,10 @@ pub unsafe extern "C" fn entry() {
97100
let mut char_lit_array_ptr: *mut [::core::ffi::c_char; 4] = b"abc\0" as *const [u8; 4]
98101
as *const [::core::ffi::c_char; 4]
99102
as *mut [::core::ffi::c_char; 4];
100-
let mut past_end: *mut ::core::ffi::c_char = &mut *static_char_array
101-
.as_mut_ptr()
102-
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize)
103-
as *mut ::core::ffi::c_char;
104-
past_end =
105-
&mut *static_char_ptr.offset(8 as ::core::ffi::c_int as isize) as *mut ::core::ffi::c_char;
103+
let mut past_end: *mut ::core::ffi::c_char = &raw mut *(&raw mut static_char_array
104+
as *mut ::core::ffi::c_char)
105+
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize);
106+
past_end = &raw mut *static_char_ptr.offset(8 as ::core::ffi::c_int as isize);
106107
}
107108
#[no_mangle]
108109
pub unsafe extern "C" fn short_initializer() {

c2rust-transpile/tests/snapshots/[email protected]

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,29 @@ input_file: c2rust-transpile/tests/snapshots/atomics.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14-
#![feature(core_intrinsics)]
14+
#![feature(core_intrinsics, raw_ref_op)]
1515
#[no_mangle]
1616
pub unsafe extern "C" fn c11_atomics(mut x: ::core::ffi::c_int) -> ::core::ffi::c_int {
17-
*&mut x = 0 as ::core::ffi::c_int;
18-
::core::intrinsics::atomic_store_seqcst(&mut x, 1 as ::core::ffi::c_int);
19-
::core::intrinsics::atomic_load_seqcst(&mut x);
20-
::core::intrinsics::atomic_xadd_seqcst(&mut x, 2 as ::core::ffi::c_int);
21-
::core::intrinsics::atomic_xsub_seqcst(&mut x, 1 as ::core::ffi::c_int);
22-
::core::intrinsics::atomic_and_seqcst(&mut x, 0xf as ::core::ffi::c_int);
23-
::core::intrinsics::atomic_or_seqcst(&mut x, 0x10 as ::core::ffi::c_int);
24-
::core::intrinsics::atomic_nand_seqcst(&mut x, 0xff as ::core::ffi::c_int);
25-
::core::intrinsics::atomic_xchg_seqcst(&mut x, 42 as ::core::ffi::c_int);
17+
*&raw mut x = 0 as ::core::ffi::c_int;
18+
::core::intrinsics::atomic_store_seqcst(&raw mut x, 1 as ::core::ffi::c_int);
19+
::core::intrinsics::atomic_load_seqcst(&raw mut x);
20+
::core::intrinsics::atomic_xadd_seqcst(&raw mut x, 2 as ::core::ffi::c_int);
21+
::core::intrinsics::atomic_xsub_seqcst(&raw mut x, 1 as ::core::ffi::c_int);
22+
::core::intrinsics::atomic_and_seqcst(&raw mut x, 0xf as ::core::ffi::c_int);
23+
::core::intrinsics::atomic_or_seqcst(&raw mut x, 0x10 as ::core::ffi::c_int);
24+
::core::intrinsics::atomic_nand_seqcst(&raw mut x, 0xff as ::core::ffi::c_int);
25+
::core::intrinsics::atomic_xchg_seqcst(&raw mut x, 42 as ::core::ffi::c_int);
2626
let mut expected: ::core::ffi::c_int = 42 as ::core::ffi::c_int;
2727
let mut desired: ::core::ffi::c_int = 100 as ::core::ffi::c_int;
28-
let fresh0 = ::core::intrinsics::atomic_cxchg_seqcst_seqcst(&mut x, *&mut expected, desired);
29-
*&mut expected = fresh0.0;
28+
let fresh0 =
29+
::core::intrinsics::atomic_cxchg_seqcst_seqcst(&raw mut x, *&raw mut expected, desired);
30+
*&raw mut expected = fresh0.0;
3031
fresh0.1;
3132
expected = 100 as ::core::ffi::c_int;
3233
desired = 200 as ::core::ffi::c_int;
3334
let fresh1 =
34-
::core::intrinsics::atomic_cxchgweak_seqcst_seqcst(&mut x, *&mut expected, desired);
35-
*&mut expected = fresh1.0;
35+
::core::intrinsics::atomic_cxchgweak_seqcst_seqcst(&raw mut x, *&raw mut expected, desired);
36+
*&raw mut expected = fresh1.0;
3637
fresh1.1;
3738
return x;
3839
}

c2rust-transpile/tests/snapshots/snapshots__transpile@compound_literals.c.snap

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/compound_literals.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14+
#![feature(raw_ref_op)]
1415
#[no_mangle]
1516
pub static mut static_single_int: ::core::ffi::c_int = 42;
1617
#[no_mangle]
@@ -34,21 +35,20 @@ pub const CHAR_ARRAY: [::core::ffi::c_char; 6] =
3435
pub unsafe extern "C" fn local_compound_literals() {
3536
let mut single_int: ::core::ffi::c_int = 42 as ::core::ffi::c_int;
3637
let mut fresh0: ::core::ffi::c_int = 42 as ::core::ffi::c_int;
37-
let mut single_int_ptr: *mut ::core::ffi::c_int = &mut fresh0 as *mut ::core::ffi::c_int;
38+
let mut single_int_ptr: *mut ::core::ffi::c_int = &raw mut fresh0;
3839
let mut fresh1: [::core::ffi::c_int; 2] =
3940
[42 as ::core::ffi::c_int, 9001 as ::core::ffi::c_int];
40-
let mut int_ptr_to_array: *mut ::core::ffi::c_int = fresh1.as_mut_ptr();
41+
let mut int_ptr_to_array: *mut ::core::ffi::c_int = &raw mut fresh1 as *mut ::core::ffi::c_int;
4142
let mut fresh2: [::core::ffi::c_char; 6] =
4243
::core::mem::transmute::<[u8; 6], [::core::ffi::c_char; 6]>(*b"hello\0");
43-
let mut char_ptr_to_array: *mut ::core::ffi::c_char = fresh2.as_mut_ptr();
44+
let mut char_ptr_to_array: *mut ::core::ffi::c_char =
45+
&raw mut fresh2 as *mut ::core::ffi::c_char;
4446
let mut fresh3: [::core::ffi::c_int; 2] =
4547
[42 as ::core::ffi::c_int, 9001 as ::core::ffi::c_int];
46-
let mut int_array_ptr: *mut [::core::ffi::c_int; 2] =
47-
&mut fresh3 as *mut [::core::ffi::c_int; 2];
48+
let mut int_array_ptr: *mut [::core::ffi::c_int; 2] = &raw mut fresh3;
4849
let mut fresh4: [::core::ffi::c_char; 6] =
4950
::core::mem::transmute::<[u8; 6], [::core::ffi::c_char; 6]>(*b"hello\0");
50-
let mut char_array_ptr: *mut [::core::ffi::c_char; 6] =
51-
&mut fresh4 as *mut [::core::ffi::c_char; 6];
51+
let mut char_array_ptr: *mut [::core::ffi::c_char; 6] = &raw mut fresh4;
5252
let mut macro_single_int: ::core::ffi::c_int = SINGLE_INT;
5353
let mut macro_single_int_ptr: *mut ::core::ffi::c_int =
5454
&mut SINGLE_INT as *mut ::core::ffi::c_int;

c2rust-transpile/tests/snapshots/[email protected]

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/exprs.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14+
#![feature(raw_ref_op)]
1415
extern "C" {
1516
fn puts(str: *const ::core::ffi::c_char) -> ::core::ffi::c_int;
1617
}
@@ -29,7 +30,7 @@ pub unsafe extern "C" fn unary_without_side_effect() {
2930
i;
3031
!i;
3132
(i == 0) as ::core::ffi::c_int;
32-
&mut i;
33+
&raw mut i;
3334
i;
3435
i += 1;
3536
i -= 1;
@@ -43,10 +44,12 @@ pub unsafe extern "C" fn unary_with_side_effect() {
4344
side_effect();
4445
!side_effect();
4546
(side_effect() == 0) as ::core::ffi::c_int;
46-
&*(b"\0" as *const u8 as *const ::core::ffi::c_char).offset(::core::mem::transmute::<
47-
unsafe extern "C" fn() -> ::core::ffi::c_int,
48-
unsafe extern "C" fn() -> ::core::ffi::c_int,
49-
>(side_effect)() as isize) as *const ::core::ffi::c_char;
47+
&raw const *(b"\0" as *const u8 as *const ::core::ffi::c_char).offset(
48+
::core::mem::transmute::<
49+
unsafe extern "C" fn() -> ::core::ffi::c_int,
50+
unsafe extern "C" fn() -> ::core::ffi::c_int,
51+
>(side_effect)() as isize,
52+
);
5053
*arr[side_effect() as usize];
5154
arr[side_effect() as usize] = arr[side_effect() as usize].offset(1);
5255
arr[side_effect() as usize] = arr[side_effect() as usize].offset(-1);

c2rust-transpile/tests/snapshots/[email protected]

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ input_file: c2rust-transpile/tests/snapshots/macros.c
1111
unused_assignments,
1212
unused_mut
1313
)]
14+
#![feature(raw_ref_op)]
1415
extern "C" {
1516
fn extern_fn() -> ::core::ffi::c_int;
1617
}
@@ -107,10 +108,9 @@ pub unsafe extern "C" fn local_muts() {
107108
::core::mem::transmute::<[u8; 18], [::core::ffi::c_char; 18]>(*b"hello hello world\0");
108109
let mut builtin: ::core::ffi::c_int =
109110
(LITERAL_INT as ::core::ffi::c_uint).leading_zeros() as i32;
110-
let mut ref_indexing: *const ::core::ffi::c_char = &*NESTED_STR
111+
let mut ref_indexing: *const ::core::ffi::c_char = &raw const *NESTED_STR
111112
.as_ptr()
112-
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
113-
as *const ::core::ffi::c_char;
113+
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize);
114114
let mut ref_struct: *const S = &mut LITERAL_STRUCT as *mut S;
115115
let mut ternary: ::core::ffi::c_int = if LITERAL_BOOL != 0 {
116116
1 as ::core::ffi::c_int
@@ -177,10 +177,9 @@ pub unsafe extern "C" fn local_consts() {
177177
let str_concatenation: [::core::ffi::c_char; 18] =
178178
::core::mem::transmute::<[u8; 18], [::core::ffi::c_char; 18]>(*b"hello hello world\0");
179179
let builtin: ::core::ffi::c_int = (LITERAL_INT as ::core::ffi::c_uint).leading_zeros() as i32;
180-
let ref_indexing: *const ::core::ffi::c_char = &*NESTED_STR
180+
let ref_indexing: *const ::core::ffi::c_char = &raw const *NESTED_STR
181181
.as_ptr()
182-
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
183-
as *const ::core::ffi::c_char;
182+
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize);
184183
let ref_struct: *const S = &mut LITERAL_STRUCT as *mut S;
185184
let ternary: ::core::ffi::c_int = if LITERAL_BOOL != 0 {
186185
1 as ::core::ffi::c_int
@@ -370,7 +369,7 @@ pub static mut fns: fn_ptrs = {
370369
init
371370
};
372371
#[no_mangle]
373-
pub static mut p: *const fn_ptrs = unsafe { &fns };
372+
pub static mut p: *const fn_ptrs = unsafe { &raw const fns };
374373
pub const ZSTD_WINDOWLOG_MAX_32: ::core::ffi::c_int = 30 as ::core::ffi::c_int;
375374
pub const ZSTD_WINDOWLOG_MAX_64: ::core::ffi::c_int = 31 as ::core::ffi::c_int;
376375
#[no_mangle]
@@ -384,7 +383,7 @@ pub unsafe extern "C" fn test_zstd() -> U64 {
384383
#[no_mangle]
385384
pub unsafe extern "C" fn stmt_expr_inc() -> ::core::ffi::c_int {
386385
let mut a: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
387-
let mut b: *mut ::core::ffi::c_int = &mut a;
386+
let mut b: *mut ::core::ffi::c_int = &raw mut a;
388387
({
389388
*b += 1;
390389
*b;
@@ -446,10 +445,9 @@ pub unsafe extern "C" fn late_init_var() -> ::core::ffi::c_int {
446445
unsafe extern "C" fn run_static_initializers() {
447446
global_static_const_ptr_arithmetic = PTR_ARITHMETIC;
448447
global_static_const_indexing = NESTED_STR[LITERAL_FLOAT as ::core::ffi::c_int as usize];
449-
global_static_const_ref_indexing = &*NESTED_STR
448+
global_static_const_ref_indexing = &raw const *NESTED_STR
450449
.as_ptr()
451-
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
452-
as *const ::core::ffi::c_char;
450+
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize);
453451
global_static_const_ternary = if LITERAL_BOOL != 0 {
454452
1 as ::core::ffi::c_int
455453
} else {
@@ -458,10 +456,9 @@ unsafe extern "C" fn run_static_initializers() {
458456
global_static_const_member = LITERAL_STRUCT.i;
459457
global_const_ptr_arithmetic = PTR_ARITHMETIC;
460458
global_const_indexing = NESTED_STR[LITERAL_FLOAT as ::core::ffi::c_int as usize];
461-
global_const_ref_indexing = &*NESTED_STR
459+
global_const_ref_indexing = &raw const *NESTED_STR
462460
.as_ptr()
463-
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
464-
as *const ::core::ffi::c_char;
461+
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize);
465462
global_const_ternary = if LITERAL_BOOL != 0 {
466463
1 as ::core::ffi::c_int
467464
} else {

tests/arrays/src/test_arrays.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//! feature_raw_ref_op
2+
13
use crate::arrays::rust_entry;
24
use crate::incomplete_arrays::{rust_check_some_ints, rust_entry2, rust_test_sized_array};
35
use crate::variable_arrays::{rust_alloca_arrays, rust_variable_arrays};

tests/builtins/src/test_builtins.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! feature_core_intrinsics
1+
//! feature_core_intrinsics, feature_raw_ref_op
22
33
use crate::alloca::rust_alloca_hello;
44
use crate::atomics::{rust_atomics_entry, rust_new_atomics};

0 commit comments

Comments
 (0)