Skip to content

Commit 3e4e8f2

Browse files
committed
Migrate all in-repo crates to edition 2024
Most of this just means wrapping the bodies of `mem` functions in `unsafe` and updating `no_mangle` / `extern`.
1 parent 3c09866 commit 3e4e8f2

15 files changed

+327
-281
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ readme = "README.md"
77
repository = "https://github.com/rust-lang/compiler-builtins"
88
homepage = "https://github.com/rust-lang/compiler-builtins"
99
documentation = "https://docs.rs/compiler_builtins"
10-
edition = "2021"
10+
edition = "2024"
1111
description = """
1212
Compiler intrinsics used by the Rust compiler. Also available for other targets
1313
if necessary!

crates/panic-handler/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "panic-handler"
33
version = "0.1.0"
44
authors = ["Alex Crichton <[email protected]>"]
5-
edition = "2021"
5+
edition = "2024"
66
publish = false
77

88
[dependencies]

examples/intrinsics.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extern crate panic_handler;
1717

1818
#[cfg(all(not(thumb), not(windows), not(target_arch = "wasm32")))]
1919
#[link(name = "c")]
20-
extern "C" {}
20+
unsafe extern "C" {}
2121

2222
// Every function in this module maps will be lowered to an intrinsic by LLVM, if the platform
2323
// doesn't have native support for the operation used in the function. ARM has a naming convention
@@ -626,7 +626,7 @@ fn run() {
626626

627627
something_with_a_dtor(&|| assert_eq!(bb(1), 1));
628628

629-
extern "C" {
629+
unsafe extern "C" {
630630
fn rust_begin_unwind(x: usize);
631631
}
632632

@@ -647,14 +647,14 @@ fn something_with_a_dtor(f: &dyn Fn()) {
647647
f();
648648
}
649649

650-
#[no_mangle]
650+
#[unsafe(no_mangle)]
651651
#[cfg(not(thumb))]
652652
fn main(_argc: core::ffi::c_int, _argv: *const *const u8) -> core::ffi::c_int {
653653
run();
654654
0
655655
}
656656

657-
#[no_mangle]
657+
#[unsafe(no_mangle)]
658658
#[cfg(thumb)]
659659
pub fn _start() -> ! {
660660
run();
@@ -664,23 +664,23 @@ pub fn _start() -> ! {
664664
#[cfg(windows)]
665665
#[link(name = "kernel32")]
666666
#[link(name = "msvcrt")]
667-
extern "C" {}
667+
unsafe extern "C" {}
668668

669669
// ARM targets need these symbols
670-
#[no_mangle]
670+
#[unsafe(no_mangle)]
671671
pub fn __aeabi_unwind_cpp_pr0() {}
672672

673-
#[no_mangle]
673+
#[unsafe(no_mangle)]
674674
pub fn __aeabi_unwind_cpp_pr1() {}
675675

676676
#[cfg(not(windows))]
677677
#[allow(non_snake_case)]
678-
#[no_mangle]
678+
#[unsafe(no_mangle)]
679679
pub fn _Unwind_Resume() {}
680680

681681
#[cfg(not(windows))]
682682
#[lang = "eh_personality"]
683-
#[no_mangle]
683+
#[unsafe(no_mangle)]
684684
pub extern "C" fn eh_personality() {}
685685

686686
#[cfg(all(windows, target_env = "gnu"))]

src/arm.rs

+59-51
Original file line numberDiff line numberDiff line change
@@ -23,64 +23,72 @@ intrinsics! {
2323
#[naked]
2424
#[cfg(not(target_env = "msvc"))]
2525
pub unsafe extern "C" fn __aeabi_uidivmod() {
26-
core::arch::naked_asm!(
27-
"push {{lr}}",
28-
"sub sp, sp, #4",
29-
"mov r2, sp",
30-
bl!("__udivmodsi4"),
31-
"ldr r1, [sp]",
32-
"add sp, sp, #4",
33-
"pop {{pc}}",
34-
);
26+
unsafe {
27+
core::arch::naked_asm!(
28+
"push {{lr}}",
29+
"sub sp, sp, #4",
30+
"mov r2, sp",
31+
bl!("__udivmodsi4"),
32+
"ldr r1, [sp]",
33+
"add sp, sp, #4",
34+
"pop {{pc}}",
35+
);
36+
}
3537
}
3638

3739
#[naked]
3840
pub unsafe extern "C" fn __aeabi_uldivmod() {
39-
core::arch::naked_asm!(
40-
"push {{r4, lr}}",
41-
"sub sp, sp, #16",
42-
"add r4, sp, #8",
43-
"str r4, [sp]",
44-
bl!("__udivmoddi4"),
45-
"ldr r2, [sp, #8]",
46-
"ldr r3, [sp, #12]",
47-
"add sp, sp, #16",
48-
"pop {{r4, pc}}",
49-
);
41+
unsafe {
42+
core::arch::naked_asm!(
43+
"push {{r4, lr}}",
44+
"sub sp, sp, #16",
45+
"add r4, sp, #8",
46+
"str r4, [sp]",
47+
bl!("__udivmoddi4"),
48+
"ldr r2, [sp, #8]",
49+
"ldr r3, [sp, #12]",
50+
"add sp, sp, #16",
51+
"pop {{r4, pc}}",
52+
);
53+
}
5054
}
5155

5256
#[naked]
5357
pub unsafe extern "C" fn __aeabi_idivmod() {
54-
core::arch::naked_asm!(
55-
"push {{r0, r1, r4, lr}}",
56-
bl!("__aeabi_idiv"),
57-
"pop {{r1, r2}}",
58-
"muls r2, r2, r0",
59-
"subs r1, r1, r2",
60-
"pop {{r4, pc}}",
61-
);
58+
unsafe {
59+
core::arch::naked_asm!(
60+
"push {{r0, r1, r4, lr}}",
61+
bl!("__aeabi_idiv"),
62+
"pop {{r1, r2}}",
63+
"muls r2, r2, r0",
64+
"subs r1, r1, r2",
65+
"pop {{r4, pc}}",
66+
);
67+
}
6268
}
6369

6470
#[naked]
6571
pub unsafe extern "C" fn __aeabi_ldivmod() {
66-
core::arch::naked_asm!(
67-
"push {{r4, lr}}",
68-
"sub sp, sp, #16",
69-
"add r4, sp, #8",
70-
"str r4, [sp]",
71-
bl!("__divmoddi4"),
72-
"ldr r2, [sp, #8]",
73-
"ldr r3, [sp, #12]",
74-
"add sp, sp, #16",
75-
"pop {{r4, pc}}",
76-
);
72+
unsafe {
73+
core::arch::naked_asm!(
74+
"push {{r4, lr}}",
75+
"sub sp, sp, #16",
76+
"add r4, sp, #8",
77+
"str r4, [sp]",
78+
bl!("__divmoddi4"),
79+
"ldr r2, [sp, #8]",
80+
"ldr r3, [sp, #12]",
81+
"add sp, sp, #16",
82+
"pop {{r4, pc}}",
83+
);
84+
}
7785
}
7886

7987
// FIXME: The `*4` and `*8` variants should be defined as aliases.
8088

8189
#[cfg(not(target_vendor = "apple"))]
8290
pub unsafe extern "aapcs" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: usize) {
83-
crate::mem::memcpy(dest, src, n);
91+
unsafe { crate::mem::memcpy(dest, src, n) };
8492
}
8593

8694
#[cfg(not(target_vendor = "apple"))]
@@ -97,33 +105,33 @@ intrinsics! {
97105
n -= 4;
98106
}
99107

100-
__aeabi_memcpy(dest as *mut u8, src as *const u8, n);
108+
unsafe { __aeabi_memcpy(dest as *mut u8, src as *const u8, n) };
101109
}
102110

103111
#[cfg(not(target_vendor = "apple"))]
104112
pub unsafe extern "aapcs" fn __aeabi_memcpy8(dest: *mut u8, src: *const u8, n: usize) {
105-
__aeabi_memcpy4(dest, src, n);
113+
unsafe { __aeabi_memcpy4(dest, src, n) };
106114
}
107115

108116
#[cfg(not(target_vendor = "apple"))]
109117
pub unsafe extern "aapcs" fn __aeabi_memmove(dest: *mut u8, src: *const u8, n: usize) {
110-
crate::mem::memmove(dest, src, n);
118+
unsafe { crate::mem::memmove(dest, src, n) };
111119
}
112120

113121
#[cfg(not(any(target_vendor = "apple", target_env = "msvc")))]
114122
pub unsafe extern "aapcs" fn __aeabi_memmove4(dest: *mut u8, src: *const u8, n: usize) {
115-
__aeabi_memmove(dest, src, n);
123+
unsafe { __aeabi_memmove(dest, src, n) };
116124
}
117125

118126
#[cfg(not(any(target_vendor = "apple", target_env = "msvc")))]
119127
pub unsafe extern "aapcs" fn __aeabi_memmove8(dest: *mut u8, src: *const u8, n: usize) {
120-
__aeabi_memmove(dest, src, n);
128+
unsafe { __aeabi_memmove(dest, src, n) };
121129
}
122130

123131
#[cfg(not(target_vendor = "apple"))]
124132
pub unsafe extern "aapcs" fn __aeabi_memset(dest: *mut u8, n: usize, c: i32) {
125133
// Note the different argument order
126-
crate::mem::memset(dest, c, n);
134+
unsafe { crate::mem::memset(dest, c, n) };
127135
}
128136

129137
#[cfg(not(target_vendor = "apple"))]
@@ -140,26 +148,26 @@ intrinsics! {
140148
n -= 4;
141149
}
142150

143-
__aeabi_memset(dest as *mut u8, n, byte as i32);
151+
unsafe { __aeabi_memset(dest as *mut u8, n, byte as i32) };
144152
}
145153

146154
#[cfg(not(target_vendor = "apple"))]
147155
pub unsafe extern "aapcs" fn __aeabi_memset8(dest: *mut u8, n: usize, c: i32) {
148-
__aeabi_memset4(dest, n, c);
156+
unsafe { __aeabi_memset4(dest, n, c) };
149157
}
150158

151159
#[cfg(not(target_vendor = "apple"))]
152160
pub unsafe extern "aapcs" fn __aeabi_memclr(dest: *mut u8, n: usize) {
153-
__aeabi_memset(dest, n, 0);
161+
unsafe { __aeabi_memset(dest, n, 0) };
154162
}
155163

156164
#[cfg(not(any(target_vendor = "apple", target_env = "msvc")))]
157165
pub unsafe extern "aapcs" fn __aeabi_memclr4(dest: *mut u8, n: usize) {
158-
__aeabi_memset4(dest, n, 0);
166+
unsafe { __aeabi_memset4(dest, n, 0) };
159167
}
160168

161169
#[cfg(not(any(target_vendor = "apple", target_env = "msvc")))]
162170
pub unsafe extern "aapcs" fn __aeabi_memclr8(dest: *mut u8, n: usize) {
163-
__aeabi_memset4(dest, n, 0);
171+
unsafe { __aeabi_memset4(dest, n, 0) };
164172
}
165173
}

src/macros.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ macro_rules! intrinsics {
255255

256256
#[cfg(all(any(windows, target_os = "uefi"), target_arch = "x86_64", not(feature = "mangled-names")))]
257257
mod $name {
258-
#[no_mangle]
258+
#[unsafe(no_mangle)]
259259
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
260260
extern $abi fn $name( $($argname: $ty),* )
261261
-> $crate::macros::win64_128bit_abi_hack::U64x2
@@ -320,7 +320,7 @@ macro_rules! intrinsics {
320320

321321
#[cfg(all(target_vendor = "apple", any(target_arch = "x86", target_arch = "x86_64"), not(feature = "mangled-names")))]
322322
mod $name {
323-
#[no_mangle]
323+
#[unsafe(no_mangle)]
324324
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
325325
$(#[$($attr)*])*
326326
extern $abi fn $name( $($argname: u16),* ) $(-> $ret)? {
@@ -356,7 +356,7 @@ macro_rules! intrinsics {
356356

357357
#[cfg(all(target_vendor = "apple", any(target_arch = "x86", target_arch = "x86_64"), not(feature = "mangled-names")))]
358358
mod $name {
359-
#[no_mangle]
359+
#[unsafe(no_mangle)]
360360
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
361361
$(#[$($attr)*])*
362362
extern $abi fn $name( $($argname: $ty),* ) -> u16 {
@@ -397,7 +397,7 @@ macro_rules! intrinsics {
397397

398398
#[cfg(all(target_arch = "arm", not(feature = "mangled-names")))]
399399
mod $name {
400-
#[no_mangle]
400+
#[unsafe(no_mangle)]
401401
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
402402
$(#[$($attr)*])*
403403
extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
@@ -407,7 +407,7 @@ macro_rules! intrinsics {
407407

408408
#[cfg(all(target_arch = "arm", not(feature = "mangled-names")))]
409409
mod $alias {
410-
#[no_mangle]
410+
#[unsafe(no_mangle)]
411411
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
412412
$(#[$($attr)*])*
413413
extern "aapcs" fn $alias( $($argname: $ty),* ) $(-> $ret)? {
@@ -474,7 +474,7 @@ macro_rules! intrinsics {
474474
#[cfg(all(feature = "mem", not(feature = "mangled-names")))]
475475
mod $name {
476476
$(#[$($attr)*])*
477-
#[no_mangle]
477+
#[unsafe(no_mangle)]
478478
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
479479
unsafe extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
480480
super::$name($($argname),*)
@@ -499,7 +499,7 @@ macro_rules! intrinsics {
499499
pub mod $name {
500500
#[naked]
501501
$(#[$($attr)*])*
502-
#[cfg_attr(not(feature = "mangled-names"), no_mangle)]
502+
#[cfg_attr(not(feature = "mangled-names"), unsafe(no_mangle))]
503503
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
504504
pub unsafe extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
505505
$($body)*
@@ -566,10 +566,10 @@ macro_rules! intrinsics {
566566
#[cfg(not(feature = "mangled-names"))]
567567
mod $name {
568568
$(#[$($attr)*])*
569-
#[no_mangle]
569+
#[unsafe(no_mangle)]
570570
#[cfg_attr(not(all(windows, target_env = "gnu")), linkage = "weak")]
571571
$(unsafe $($empty)?)? extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
572-
super::$name($($argname),*)
572+
$(unsafe $($empty)?)? { super::$name($($argname),*) }
573573
}
574574
}
575575

0 commit comments

Comments
 (0)