summaryrefslogtreecommitdiffstats
path: root/vendor/compiler_builtins/src/macros.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/compiler_builtins/src/macros.rs
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/compiler_builtins/src/macros.rs')
-rw-r--r--vendor/compiler_builtins/src/macros.rs20
1 files changed, 10 insertions, 10 deletions
diff --git a/vendor/compiler_builtins/src/macros.rs b/vendor/compiler_builtins/src/macros.rs
index 59f25317e..b11114f12 100644
--- a/vendor/compiler_builtins/src/macros.rs
+++ b/vendor/compiler_builtins/src/macros.rs
@@ -33,7 +33,7 @@ macro_rules! public_test_dep {
///
/// This macro is structured to be invoked with a bunch of functions that looks
/// like:
-///
+/// ```ignore
/// intrinsics! {
/// pub extern "C" fn foo(a: i32) -> u32 {
/// // ...
@@ -44,6 +44,7 @@ macro_rules! public_test_dep {
/// // ...
/// }
/// }
+/// ```
///
/// Each function is defined in a manner that looks like a normal Rust function.
/// The macro then accepts a few nonstandard attributes that can decorate
@@ -203,7 +204,7 @@ macro_rules! intrinsics {
(
#[maybe_use_optimized_c_shim]
$(#[$($attr:tt)*])*
- pub extern $abi:tt fn $name:ident( $($argname:ident: $ty:ty),* ) $(-> $ret:ty)? {
+ pub $(unsafe $(@ $empty:tt)? )? extern $abi:tt fn $name:ident( $($argname:ident: $ty:ty),* ) $(-> $ret:ty)? {
$($body:tt)*
}
@@ -211,7 +212,7 @@ macro_rules! intrinsics {
) => (
#[cfg($name = "optimized-c")]
#[cfg_attr(feature = "weak-intrinsics", linkage = "weak")]
- pub extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
+ pub $(unsafe $($empty)? )? extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
extern $abi {
fn $name($($argname: $ty),*) $(-> $ret)?;
}
@@ -223,7 +224,7 @@ macro_rules! intrinsics {
#[cfg(not($name = "optimized-c"))]
intrinsics! {
$(#[$($attr)*])*
- pub extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
+ pub $(unsafe $($empty)? )? extern $abi fn $name( $($argname: $ty),* ) $(-> $ret)? {
$($body)*
}
}
@@ -437,12 +438,11 @@ macro_rules! intrinsics {
intrinsics!($($rest)*);
);
- // For division and modulo, AVR uses a custom calling convention¹ that does
- // not match our definitions here. Ideally we would just use hand-written
- // naked functions, but that's quite a lot of code to port² - so for the
- // time being we are just ignoring the problematic functions, letting
- // avr-gcc (which is required to compile to AVR anyway) link them from
- // libgcc.
+ // For some intrinsics, AVR uses a custom calling convention¹ that does not
+ // match our definitions here. Ideally we would just use hand-written naked
+ // functions, but that's quite a lot of code to port² - so for the time
+ // being we are just ignoring the problematic functions, letting avr-gcc
+ // (which is required to compile to AVR anyway) link them from libgcc.
//
// ¹ https://gcc.gnu.org/wiki/avr-gcc (see "Exceptions to the Calling
// Convention")