stabilize naked_functions

This commit is contained in:
Folkert de Vries 2024-12-18 22:05:27 +01:00
parent 49e5e4e3a5
commit df8a3d5f1d
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
53 changed files with 165 additions and 294 deletions

View file

@ -1,13 +1,4 @@
#![feature(
no_core,
lang_items,
never_type,
linkage,
extern_types,
naked_functions,
thread_local,
repr_simd
)]
#![feature(no_core, lang_items, never_type, linkage, extern_types, thread_local, repr_simd)]
#![no_core]
#![allow(dead_code, non_camel_case_types, internal_features)]

View file

@ -3,8 +3,6 @@ An unsupported naked function definition.
Erroneous code example:
```compile_fail,E0787
#![feature(naked_functions)]
#[unsafe(naked)]
pub extern "C" fn f() -> u32 {
42

View file

@ -300,6 +300,8 @@ declare_features! (
/// Allows patterns with concurrent by-move and by-ref bindings.
/// For example, you can write `Foo(a, ref b)` where `a` is by-move and `b` is by-ref.
(accepted, move_ref_pattern, "1.49.0", Some(68354)),
/// Allows using `#[naked]` on functions.
(accepted, naked_functions, "CURRENT_RUSTC_VERSION", Some(90957)),
/// Allows specifying modifiers in the link attribute: `#[link(modifiers = "...")]`
(accepted, native_link_modifiers, "1.61.0", Some(81490)),
/// Allows specifying the bundle link modifier

View file

@ -443,6 +443,7 @@ pub static BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
ungated!(unsafe(Edition2024) no_mangle, Normal, template!(Word), WarnFollowing, EncodeCrossCrate::No),
ungated!(used, Normal, template!(Word, List: "compiler|linker"), WarnFollowing, EncodeCrossCrate::No),
ungated!(link_ordinal, Normal, template!(List: "ordinal"), ErrorPreceding, EncodeCrossCrate::Yes),
ungated!(unsafe naked, Normal, template!(Word), WarnFollowing, EncodeCrossCrate::No),
// Limits:
ungated!(
@ -515,12 +516,6 @@ pub static BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
// Unstable attributes:
// ==========================================================================
// Linking:
gated!(
unsafe naked, Normal, template!(Word), WarnFollowing, EncodeCrossCrate::No,
naked_functions, experimental!(naked)
),
// Testing:
gated!(
test_runner, CrateLevel, template!(List: "path"), ErrorFollowing,

View file

@ -563,8 +563,6 @@ declare_features! (
(unstable, must_not_suspend, "1.57.0", Some(83310)),
/// Allows `mut ref` and `mut ref mut` identifier patterns.
(incomplete, mut_ref, "1.79.0", Some(123076)),
/// Allows using `#[naked]` on functions.
(unstable, naked_functions, "1.9.0", Some(90957)),
/// Allows using `#[naked]` on `extern "Rust"` functions.
(unstable, naked_functions_rustic_abi, "CURRENT_RUSTC_VERSION", Some(138997)),
/// Allows using `#[target_feature(enable = "...")]` on `#[naked]` on functions.

View file

@ -690,13 +690,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
}
}
}
// FIXME(#80564): We permit struct fields, match arms and macro defs to have an
// `#[naked]` attribute with just a lint, because we previously
// erroneously allowed it and some crates used it accidentally, to be compatible
// with crates depending on them, we can't throw an error here.
Target::Field | Target::Arm | Target::MacroDef => {
self.inline_attr_str_error_with_macro_def(hir_id, attr, "naked")
}
_ => {
self.dcx().emit_err(errors::AttrShouldBeAppliedToFn {
attr_span: attr.span(),

View file

@ -32,7 +32,7 @@ pub macro asm("assembly template", $(operands,)* $(options($(option),*))?) {
///
/// [Rust By Example]: https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html
/// [reference]: https://doc.rust-lang.org/nightly/reference/inline-assembly.html
#[unstable(feature = "naked_functions", issue = "90957")]
#[stable(feature = "naked_functions", since = "CURRENT_RUSTC_VERSION")]
#[rustc_builtin_macro]
pub macro naked_asm("assembly template", $(operands,)* $(options($(option),*))?) {
/* compiler built-in */

View file

@ -245,8 +245,6 @@ See the [Clang ControlFlowIntegrity documentation][clang-cfi] for more details.
## Example 1: Redirecting control flow using an indirect branch/call to an invalid destination
```rust,ignore (making doc tests pass cross-platform is hard)
#![feature(naked_functions)]
use std::arch::naked_asm;
use std::mem;

View file

@ -4,7 +4,7 @@
//@ only-aarch64
#![crate_type = "lib"]
#![feature(naked_functions)]
use std::arch::naked_asm;
// The problem at hand: Rust has adopted a fairly strict meaning for "naked functions",

View file

@ -9,7 +9,7 @@
//@[aix] needs-llvm-components: powerpc
#![crate_type = "lib"]
#![feature(no_core, naked_functions, asm_experimental_arch, f128, linkage, fn_align)]
#![feature(no_core, asm_experimental_arch, f128, linkage, fn_align)]
#![no_core]
// tests that naked functions work for the `powerpc64-ibm-aix` target.

View file

@ -9,7 +9,7 @@
//@ [wasm32-wasip1] needs-llvm-components: webassembly
#![crate_type = "lib"]
#![feature(no_core, naked_functions, asm_experimental_arch, f128, linkage, fn_align)]
#![feature(no_core, asm_experimental_arch, f128, linkage, fn_align)]
#![no_core]
extern crate minicore;

View file

@ -4,7 +4,7 @@
//@ only-x86_64
#![crate_type = "lib"]
#![feature(naked_functions)]
use std::arch::naked_asm;
// The problem at hand: Rust has adopted a fairly strict meaning for "naked functions",

View file

@ -22,7 +22,6 @@
negative_impls,
rustc_attrs,
decl_macro,
naked_functions,
f16,
f128,
asm_experimental_arch,

View file

@ -5,7 +5,6 @@
#![crate_type = "lib"]
#![feature(c_variadic)]
#![feature(naked_functions)]
#![no_std]
#[unsafe(naked)]

View file

@ -6,7 +6,7 @@
#![crate_type = "lib"]
#![no_std]
#![feature(abi_x86_interrupt, naked_functions)]
#![feature(abi_x86_interrupt)]
pub fn caller() {
page_fault_handler(1, 2);

View file

@ -3,7 +3,7 @@
//@ ignore-arm no "ret" mnemonic
#![crate_type = "lib"]
#![feature(naked_functions, fn_align)]
#![feature(fn_align)]
use std::arch::naked_asm;
// CHECK: .balign 16

View file

@ -2,7 +2,6 @@
//@ only-x86_64
#![crate_type = "lib"]
#![feature(naked_functions, asm_const)]
use std::arch::naked_asm;

View file

@ -6,7 +6,7 @@
//@ [thumb-mode] needs-llvm-components: arm
#![crate_type = "lib"]
#![feature(no_core, lang_items, rustc_attrs, naked_functions)]
#![feature(no_core, lang_items, rustc_attrs)]
#![no_core]
extern crate minicore;

View file

@ -2,7 +2,7 @@
//@ needs-asm-support
//@ ignore-arm no "ret" mnemonic
#![feature(naked_functions, fn_align)]
#![feature(fn_align)]
#![crate_type = "lib"]
// functions without explicit alignment use the global minimum

View file

@ -13,7 +13,7 @@
//@[thumb] needs-llvm-components: arm
#![crate_type = "lib"]
#![feature(no_core, lang_items, rustc_attrs, naked_functions)]
#![feature(no_core, lang_items, rustc_attrs)]
#![no_core]
extern crate minicore;

View file

@ -1,4 +1,4 @@
#![feature(naked_functions, linkage)]
#![feature(linkage)]
#![crate_type = "dylib"]
use std::arch::naked_asm;

View file

@ -3,7 +3,6 @@
//@ ignore-nvptx64
//@ ignore-spirv
#![feature(naked_functions)]
#![crate_type = "lib"]
use std::arch::naked_asm;

View file

@ -1,17 +1,17 @@
error: the `naked_asm!` macro can only be used in functions marked with `#[unsafe(naked)]`
--> $DIR/naked-asm-outside-naked-fn.rs:21:5
--> $DIR/naked-asm-outside-naked-fn.rs:20:5
|
LL | naked_asm!("")
| ^^^^^^^^^^^^^^
error: the `naked_asm!` macro can only be used in functions marked with `#[unsafe(naked)]`
--> $DIR/naked-asm-outside-naked-fn.rs:26:9
--> $DIR/naked-asm-outside-naked-fn.rs:25:9
|
LL | (|| naked_asm!(""))()
| ^^^^^^^^^^^^^^
error: the `naked_asm!` macro can only be used in functions marked with `#[unsafe(naked)]`
--> $DIR/naked-asm-outside-naked-fn.rs:32:9
--> $DIR/naked-asm-outside-naked-fn.rs:31:9
|
LL | naked_asm!("");
| ^^^^^^^^^^^^^^

View file

@ -1,6 +1,5 @@
//@ check-pass
//@ needs-asm-support
#![feature(naked_functions)]
#![crate_type = "lib"]
use std::arch::naked_asm;

View file

@ -1,5 +1,5 @@
warning: `extern` fn uses type `char`, which is not FFI-safe
--> $DIR/naked-functions-ffi.rs:9:28
--> $DIR/naked-functions-ffi.rs:8:28
|
LL | pub extern "C" fn naked(p: char) -> u128 {
| ^^^^ not FFI-safe
@ -9,7 +9,7 @@ LL | pub extern "C" fn naked(p: char) -> u128 {
= note: `#[warn(improper_ctypes_definitions)]` on by default
warning: `extern` fn uses type `u128`, which is not FFI-safe
--> $DIR/naked-functions-ffi.rs:9:37
--> $DIR/naked-functions-ffi.rs:8:37
|
LL | pub extern "C" fn naked(p: char) -> u128 {
| ^^^^ not FFI-safe

View file

@ -1,5 +1,4 @@
//@ needs-asm-support
#![feature(naked_functions)]
#![crate_type = "lib"]
use std::arch::naked_asm;

View file

@ -1,5 +1,5 @@
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/naked-functions-inline.rs:13:1
--> $DIR/naked-functions-inline.rs:12:1
|
LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here
@ -7,7 +7,7 @@ LL | #[inline]
| ^^^^^^^^^ the `inline` attribute is incompatible with `#[unsafe(naked)]`
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/naked-functions-inline.rs:20:1
--> $DIR/naked-functions-inline.rs:19:1
|
LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here
@ -15,7 +15,7 @@ LL | #[inline(always)]
| ^^^^^^^^^^^^^^^^^ the `inline` attribute is incompatible with `#[unsafe(naked)]`
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/naked-functions-inline.rs:27:1
--> $DIR/naked-functions-inline.rs:26:1
|
LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here
@ -23,7 +23,7 @@ LL | #[inline(never)]
| ^^^^^^^^^^^^^^^^ the `inline` attribute is incompatible with `#[unsafe(naked)]`
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/naked-functions-inline.rs:34:19
--> $DIR/naked-functions-inline.rs:33:19
|
LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here

View file

@ -5,7 +5,7 @@
//@ build-pass
#![crate_type = "lib"]
#![feature(no_core, naked_functions)]
#![feature(no_core)]
#![no_core]
extern crate minicore;

View file

@ -6,7 +6,7 @@
//@ build-pass
//@ needs-asm-support
#![feature(naked_functions, naked_functions_rustic_abi, rust_cold_cc)]
#![feature(naked_functions_rustic_abi, rust_cold_cc)]
#![crate_type = "lib"]
use std::arch::{asm, naked_asm};

View file

@ -1,7 +1,7 @@
//@ build-pass
//@ needs-asm-support
#![feature(naked_functions, naked_functions_target_feature)]
#![feature(naked_functions_target_feature)]
#![crate_type = "lib"]
use std::arch::{asm, naked_asm};

View file

@ -1,7 +1,6 @@
//@ needs-asm-support
//@ compile-flags: --test
#![feature(naked_functions)]
#![feature(test)]
#![crate_type = "lib"]

View file

@ -1,5 +1,5 @@
error[E0736]: cannot use `#[unsafe(naked)]` with testing attributes
--> $DIR/naked-functions-testattrs.rs:11:1
--> $DIR/naked-functions-testattrs.rs:10:1
|
LL | #[test]
| ------- function marked with testing attribute here
@ -7,7 +7,7 @@ LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^ `#[unsafe(naked)]` is incompatible with testing attributes
error[E0736]: cannot use `#[unsafe(naked)]` with testing attributes
--> $DIR/naked-functions-testattrs.rs:19:1
--> $DIR/naked-functions-testattrs.rs:18:1
|
LL | #[test]
| ------- function marked with testing attribute here
@ -15,7 +15,7 @@ LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^ `#[unsafe(naked)]` is incompatible with testing attributes
error[E0736]: cannot use `#[unsafe(naked)]` with testing attributes
--> $DIR/naked-functions-testattrs.rs:27:1
--> $DIR/naked-functions-testattrs.rs:26:1
|
LL | #[test]
| ------- function marked with testing attribute here
@ -23,7 +23,7 @@ LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^ `#[unsafe(naked)]` is incompatible with testing attributes
error[E0736]: cannot use `#[unsafe(naked)]` with testing attributes
--> $DIR/naked-functions-testattrs.rs:34:1
--> $DIR/naked-functions-testattrs.rs:33:1
|
LL | #[bench]
| -------- function marked with testing attribute here

View file

@ -1,5 +1,5 @@
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:17:32
--> $DIR/naked-functions-unused.rs:16:32
|
LL | pub extern "C" fn function(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
@ -12,55 +12,55 @@ LL | #![deny(unused)]
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:17:42
--> $DIR/naked-functions-unused.rs:16:42
|
LL | pub extern "C" fn function(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:28:38
--> $DIR/naked-functions-unused.rs:27:38
|
LL | pub extern "C" fn associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:28:48
--> $DIR/naked-functions-unused.rs:27:48
|
LL | pub extern "C" fn associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:36:41
--> $DIR/naked-functions-unused.rs:35:41
|
LL | pub extern "C" fn method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:36:51
--> $DIR/naked-functions-unused.rs:35:51
|
LL | pub extern "C" fn method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:46:40
--> $DIR/naked-functions-unused.rs:45:40
|
LL | extern "C" fn trait_associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:46:50
--> $DIR/naked-functions-unused.rs:45:50
|
LL | extern "C" fn trait_associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:54:43
--> $DIR/naked-functions-unused.rs:53:43
|
LL | extern "C" fn trait_method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:54:53
--> $DIR/naked-functions-unused.rs:53:53
|
LL | extern "C" fn trait_method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`

View file

@ -3,7 +3,6 @@
//@[x86_64] only-x86_64
//@[aarch64] only-aarch64
#![deny(unused)]
#![feature(naked_functions)]
#![crate_type = "lib"]
pub trait Trait {

View file

@ -1,5 +1,5 @@
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:17:32
--> $DIR/naked-functions-unused.rs:16:32
|
LL | pub extern "C" fn function(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
@ -12,55 +12,55 @@ LL | #![deny(unused)]
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:17:42
--> $DIR/naked-functions-unused.rs:16:42
|
LL | pub extern "C" fn function(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:28:38
--> $DIR/naked-functions-unused.rs:27:38
|
LL | pub extern "C" fn associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:28:48
--> $DIR/naked-functions-unused.rs:27:48
|
LL | pub extern "C" fn associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:36:41
--> $DIR/naked-functions-unused.rs:35:41
|
LL | pub extern "C" fn method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:36:51
--> $DIR/naked-functions-unused.rs:35:51
|
LL | pub extern "C" fn method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:46:40
--> $DIR/naked-functions-unused.rs:45:40
|
LL | extern "C" fn trait_associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:46:50
--> $DIR/naked-functions-unused.rs:45:50
|
LL | extern "C" fn trait_associated(a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`
error: unused variable: `a`
--> $DIR/naked-functions-unused.rs:54:43
--> $DIR/naked-functions-unused.rs:53:43
|
LL | extern "C" fn trait_method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_a`
error: unused variable: `b`
--> $DIR/naked-functions-unused.rs:54:53
--> $DIR/naked-functions-unused.rs:53:53
|
LL | extern "C" fn trait_method(&self, a: usize, b: usize) -> usize {
| ^ help: if this is intentional, prefix it with an underscore: `_b`

View file

@ -2,7 +2,6 @@
//@ ignore-nvptx64
//@ ignore-spirv
#![feature(naked_functions)]
#![feature(asm_unwind, linkage)]
#![crate_type = "lib"]

View file

@ -1,107 +1,107 @@
error: the `in` operand cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:47:29
--> $DIR/naked-functions.rs:46:29
|
LL | naked_asm!("/* {0} */", in(reg) a)
| ^^ the `in` operand is not meaningful for global-scoped inline assembly, remove it
error: the `in` operand cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:68:10
--> $DIR/naked-functions.rs:67:10
|
LL | in(reg) a,
| ^^ the `in` operand is not meaningful for global-scoped inline assembly, remove it
error: the `noreturn` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:88:28
--> $DIR/naked-functions.rs:87:28
|
LL | naked_asm!("", options(noreturn));
| ^^^^^^^^ the `noreturn` option is not meaningful for global-scoped inline assembly
error: the `nomem` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:105:28
--> $DIR/naked-functions.rs:104:28
|
LL | naked_asm!("", options(nomem, preserves_flags));
| ^^^^^ the `nomem` option is not meaningful for global-scoped inline assembly
error: the `preserves_flags` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:105:35
--> $DIR/naked-functions.rs:104:35
|
LL | naked_asm!("", options(nomem, preserves_flags));
| ^^^^^^^^^^^^^^^ the `preserves_flags` option is not meaningful for global-scoped inline assembly
error: the `readonly` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:112:28
--> $DIR/naked-functions.rs:111:28
|
LL | naked_asm!("", options(readonly, nostack), options(pure));
| ^^^^^^^^ the `readonly` option is not meaningful for global-scoped inline assembly
error: the `nostack` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:112:38
--> $DIR/naked-functions.rs:111:38
|
LL | naked_asm!("", options(readonly, nostack), options(pure));
| ^^^^^^^ the `nostack` option is not meaningful for global-scoped inline assembly
error: the `pure` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:112:56
--> $DIR/naked-functions.rs:111:56
|
LL | naked_asm!("", options(readonly, nostack), options(pure));
| ^^^^ the `pure` option is not meaningful for global-scoped inline assembly
error: the `may_unwind` option cannot be used with `naked_asm!`
--> $DIR/naked-functions.rs:120:28
--> $DIR/naked-functions.rs:119:28
|
LL | naked_asm!("", options(may_unwind));
| ^^^^^^^^^^ the `may_unwind` option is not meaningful for global-scoped inline assembly
error: this is a user specified error
--> $DIR/naked-functions.rs:151:5
--> $DIR/naked-functions.rs:150:5
|
LL | compile_error!("this is a user specified error")
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this is a user specified error
--> $DIR/naked-functions.rs:157:5
--> $DIR/naked-functions.rs:156:5
|
LL | compile_error!("this is a user specified error");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: asm template must be a string literal
--> $DIR/naked-functions.rs:164:16
--> $DIR/naked-functions.rs:163:16
|
LL | naked_asm!(invalid_syntax)
| ^^^^^^^^^^^^^^
error[E0787]: the `asm!` macro is not allowed in naked functions
--> $DIR/naked-functions.rs:13:14
--> $DIR/naked-functions.rs:12:14
|
LL | unsafe { asm!("", options(raw)) };
| ^^^^^^^^^^^^^^^^^^^^^^ consider using the `naked_asm!` macro instead
error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:25:5
--> $DIR/naked-functions.rs:24:5
|
LL | mut a: u32,
| ^^^^^
error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:27:5
--> $DIR/naked-functions.rs:26:5
|
LL | &b: &i32,
| ^^
error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:29:6
--> $DIR/naked-functions.rs:28:6
|
LL | (None | Some(_)): Option<std::ptr::NonNull<u8>>,
| ^^^^^^^^^^^^^^
error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:31:5
--> $DIR/naked-functions.rs:30:5
|
LL | P { x, y }: P,
| ^^^^^^^^^^
error: referencing function parameters is not allowed in naked functions
--> $DIR/naked-functions.rs:40:5
--> $DIR/naked-functions.rs:39:5
|
LL | a + 1
| ^
@ -109,7 +109,7 @@ LL | a + 1
= help: follow the calling convention in asm block to use parameters
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:38:1
--> $DIR/naked-functions.rs:37:1
|
LL | pub extern "C" fn inc(a: u32) -> u32 {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -118,7 +118,7 @@ LL | a + 1
| ----- not allowed in naked functions
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:52:1
--> $DIR/naked-functions.rs:51:1
|
LL | pub extern "C" fn inc_closure(a: u32) -> u32 {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -127,7 +127,7 @@ LL | (|| a + 1)()
| ------------ not allowed in naked functions
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:58:1
--> $DIR/naked-functions.rs:57:1
|
LL | pub extern "C" fn unsupported_operands() {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -144,13 +144,13 @@ LL | let mut e = 0usize;
| ------------------- not allowed in naked functions
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:80:1
--> $DIR/naked-functions.rs:79:1
|
LL | pub extern "C" fn missing_assembly() {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:85:1
--> $DIR/naked-functions.rs:84:1
|
LL | pub extern "C" fn too_many_asm_blocks() {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -159,7 +159,7 @@ LL | naked_asm!("");
| -------------- multiple `naked_asm!` invocations are not allowed in naked functions
error: referencing function parameters is not allowed in naked functions
--> $DIR/naked-functions.rs:97:11
--> $DIR/naked-functions.rs:96:11
|
LL | *&y
| ^
@ -167,7 +167,7 @@ LL | *&y
= help: follow the calling convention in asm block to use parameters
error[E0787]: naked functions must contain a single `naked_asm!` invocation
--> $DIR/naked-functions.rs:95:5
--> $DIR/naked-functions.rs:94:5
|
LL | pub extern "C" fn inner(y: usize) -> usize {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -1,7 +1,6 @@
// Checks that #[unsafe(naked)] attribute can be placed on function definitions only.
// Checks that the #[unsafe(naked)] attribute can be placed on function definitions only.
//
//@ needs-asm-support
#![feature(naked_functions)]
#![unsafe(naked)] //~ ERROR should be applied to a function definition
use std::arch::naked_asm;
@ -14,6 +13,7 @@ extern "C" {
#[unsafe(naked)] //~ ERROR should be applied to a function definition
#[repr(C)]
struct S {
#[unsafe(naked)] //~ ERROR should be applied to a function definition
a: u32,
b: u32,
}

View file

@ -1,15 +1,24 @@
error: attribute should be applied to a function definition
--> $DIR/naked-invalid-attr.rs:14:1
--> $DIR/naked-invalid-attr.rs:13:1
|
LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^
LL | #[repr(C)]
LL | / struct S {
LL | | #[unsafe(naked)]
LL | | a: u32,
LL | | b: u32,
LL | | }
| |_- not a function definition
error: attribute should be applied to a function definition
--> $DIR/naked-invalid-attr.rs:16:5
|
LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^
LL | a: u32,
| ------ not a function definition
error: attribute should be applied to a function definition
--> $DIR/naked-invalid-attr.rs:51:5
|
@ -27,7 +36,7 @@ LL | extern "C" fn invoke(&self);
| ---------------------------- not a function definition
error: attribute should be applied to a function definition
--> $DIR/naked-invalid-attr.rs:10:5
--> $DIR/naked-invalid-attr.rs:9:5
|
LL | #[unsafe(naked)]
| ^^^^^^^^^^^^^^^^
@ -35,10 +44,10 @@ LL | fn f();
| ------- not a function definition
error: attribute should be applied to a function definition
--> $DIR/naked-invalid-attr.rs:5:1
--> $DIR/naked-invalid-attr.rs:4:1
|
LL | #![unsafe(naked)]
| ^^^^^^^^^^^^^^^^^ cannot be applied to crates
error: aborting due to 5 previous errors
error: aborting due to 6 previous errors

View file

@ -1,5 +1,4 @@
//@ needs-asm-support
#![feature(naked_functions)]
#![feature(fn_align)]
#![crate_type = "lib"]
use std::arch::naked_asm;

View file

@ -1,5 +1,5 @@
error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/naked-with-invalid-repr-attr.rs:7:8
--> $DIR/naked-with-invalid-repr-attr.rs:6:8
|
LL | #[repr(C)]
| ^
@ -11,7 +11,7 @@ LL | | }
| |_- not a struct, enum, or union
error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/naked-with-invalid-repr-attr.rs:15:8
--> $DIR/naked-with-invalid-repr-attr.rs:14:8
|
LL | #[repr(transparent)]
| ^^^^^^^^^^^
@ -23,7 +23,7 @@ LL | | }
| |_- not a struct, enum, or union
error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/naked-with-invalid-repr-attr.rs:23:19
--> $DIR/naked-with-invalid-repr-attr.rs:22:19
|
LL | #[repr(align(16), C)]
| ^
@ -35,7 +35,7 @@ LL | | }
| |_- not a struct, enum, or union
error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/naked-with-invalid-repr-attr.rs:32:8
--> $DIR/naked-with-invalid-repr-attr.rs:31:8
|
LL | #[repr(C, packed)]
| ^
@ -48,7 +48,7 @@ LL | | }
| |_- not a struct, enum, or union
error[E0517]: attribute should be applied to a struct or union
--> $DIR/naked-with-invalid-repr-attr.rs:32:11
--> $DIR/naked-with-invalid-repr-attr.rs:31:11
|
LL | #[repr(C, packed)]
| ^^^^^^
@ -61,7 +61,7 @@ LL | | }
| |_- not a struct or union
error[E0517]: attribute should be applied to an enum
--> $DIR/naked-with-invalid-repr-attr.rs:42:8
--> $DIR/naked-with-invalid-repr-attr.rs:41:8
|
LL | #[repr(u8)]
| ^^

View file

@ -10,8 +10,6 @@
// which causes less readable LLVM errors and in the worst cases causes ICEs
// or segfaults based on system dependent behavior and codegen flags.
#![feature(naked_functions)]
use std::arch::{asm, global_asm, naked_asm};
#[no_mangle]

View file

@ -1,5 +1,5 @@
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:23:15
--> $DIR/named-asm-labels.rs:21:15
|
LL | asm!("bar: nop");
| ^^^
@ -9,7 +9,7 @@ LL | asm!("bar: nop");
= note: `#[deny(named_asm_labels)]` on by default
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:26:15
--> $DIR/named-asm-labels.rs:24:15
|
LL | asm!("abcd:");
| ^^^^
@ -18,7 +18,7 @@ LL | asm!("abcd:");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:29:15
--> $DIR/named-asm-labels.rs:27:15
|
LL | asm!("foo: bar1: nop");
| ^^^
@ -27,7 +27,7 @@ LL | asm!("foo: bar1: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:29:20
--> $DIR/named-asm-labels.rs:27:20
|
LL | asm!("foo: bar1: nop");
| ^^^^
@ -36,7 +36,7 @@ LL | asm!("foo: bar1: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:34:15
--> $DIR/named-asm-labels.rs:32:15
|
LL | asm!("foo1: nop", "nop");
| ^^^^
@ -45,7 +45,7 @@ LL | asm!("foo1: nop", "nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:35:15
--> $DIR/named-asm-labels.rs:33:15
|
LL | asm!("foo2: foo3: nop", "nop");
| ^^^^
@ -54,7 +54,7 @@ LL | asm!("foo2: foo3: nop", "nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:35:21
--> $DIR/named-asm-labels.rs:33:21
|
LL | asm!("foo2: foo3: nop", "nop");
| ^^^^
@ -63,7 +63,7 @@ LL | asm!("foo2: foo3: nop", "nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:38:22
--> $DIR/named-asm-labels.rs:36:22
|
LL | asm!("nop", "foo4: nop");
| ^^^^
@ -72,7 +72,7 @@ LL | asm!("nop", "foo4: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:39:15
--> $DIR/named-asm-labels.rs:37:15
|
LL | asm!("foo5: nop", "foo6: nop");
| ^^^^
@ -81,7 +81,7 @@ LL | asm!("foo5: nop", "foo6: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:39:28
--> $DIR/named-asm-labels.rs:37:28
|
LL | asm!("foo5: nop", "foo6: nop");
| ^^^^
@ -90,7 +90,7 @@ LL | asm!("foo5: nop", "foo6: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:44:15
--> $DIR/named-asm-labels.rs:42:15
|
LL | asm!("foo7: nop; foo8: nop");
| ^^^^
@ -99,7 +99,7 @@ LL | asm!("foo7: nop; foo8: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:44:26
--> $DIR/named-asm-labels.rs:42:26
|
LL | asm!("foo7: nop; foo8: nop");
| ^^^^
@ -108,7 +108,7 @@ LL | asm!("foo7: nop; foo8: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:47:15
--> $DIR/named-asm-labels.rs:45:15
|
LL | asm!("foo9: nop; nop");
| ^^^^
@ -117,7 +117,7 @@ LL | asm!("foo9: nop; nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:48:20
--> $DIR/named-asm-labels.rs:46:20
|
LL | asm!("nop; foo10: nop");
| ^^^^^
@ -126,7 +126,7 @@ LL | asm!("nop; foo10: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:51:15
--> $DIR/named-asm-labels.rs:49:15
|
LL | asm!("bar2: nop\n bar3: nop");
| ^^^^
@ -135,7 +135,7 @@ LL | asm!("bar2: nop\n bar3: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:51:27
--> $DIR/named-asm-labels.rs:49:27
|
LL | asm!("bar2: nop\n bar3: nop");
| ^^^^
@ -144,7 +144,7 @@ LL | asm!("bar2: nop\n bar3: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:54:15
--> $DIR/named-asm-labels.rs:52:15
|
LL | asm!("bar4: nop\n nop");
| ^^^^
@ -153,7 +153,7 @@ LL | asm!("bar4: nop\n nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:55:21
--> $DIR/named-asm-labels.rs:53:21
|
LL | asm!("nop\n bar5: nop");
| ^^^^
@ -162,7 +162,7 @@ LL | asm!("nop\n bar5: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:56:21
--> $DIR/named-asm-labels.rs:54:21
|
LL | asm!("nop\n bar6: bar7: nop");
| ^^^^
@ -171,7 +171,7 @@ LL | asm!("nop\n bar6: bar7: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:56:27
--> $DIR/named-asm-labels.rs:54:27
|
LL | asm!("nop\n bar6: bar7: nop");
| ^^^^
@ -180,7 +180,7 @@ LL | asm!("nop\n bar6: bar7: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:63:13
--> $DIR/named-asm-labels.rs:61:13
|
LL | blah2: nop
| ^^^^^
@ -189,7 +189,7 @@ LL | blah2: nop
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:64:13
--> $DIR/named-asm-labels.rs:62:13
|
LL | blah3: nop
| ^^^^^
@ -198,7 +198,7 @@ LL | blah3: nop
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:73:19
--> $DIR/named-asm-labels.rs:71:19
|
LL | nop ; blah4: nop
| ^^^^^
@ -207,7 +207,7 @@ LL | nop ; blah4: nop
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:87:15
--> $DIR/named-asm-labels.rs:85:15
|
LL | asm!("blah1: 2bar: nop");
| ^^^^^
@ -216,7 +216,7 @@ LL | asm!("blah1: 2bar: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:90:15
--> $DIR/named-asm-labels.rs:88:15
|
LL | asm!("def: def: nop");
| ^^^
@ -225,7 +225,7 @@ LL | asm!("def: def: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:90:15
--> $DIR/named-asm-labels.rs:88:15
|
LL | asm!("def: def: nop");
| ^^^
@ -235,7 +235,7 @@ LL | asm!("def: def: nop");
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:93:15
--> $DIR/named-asm-labels.rs:91:15
|
LL | asm!("def: nop\ndef: nop");
| ^^^
@ -244,7 +244,7 @@ LL | asm!("def: nop\ndef: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:93:15
--> $DIR/named-asm-labels.rs:91:15
|
LL | asm!("def: nop\ndef: nop");
| ^^^
@ -254,7 +254,7 @@ LL | asm!("def: nop\ndef: nop");
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:96:15
--> $DIR/named-asm-labels.rs:94:15
|
LL | asm!("def: nop; def: nop");
| ^^^
@ -263,7 +263,7 @@ LL | asm!("def: nop; def: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:96:15
--> $DIR/named-asm-labels.rs:94:15
|
LL | asm!("def: nop; def: nop");
| ^^^
@ -273,7 +273,7 @@ LL | asm!("def: nop; def: nop");
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:106:15
--> $DIR/named-asm-labels.rs:104:15
|
LL | asm!("fooo\u{003A} nop");
| ^^^^^^^^^^^^^^^^
@ -282,7 +282,7 @@ LL | asm!("fooo\u{003A} nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:107:15
--> $DIR/named-asm-labels.rs:105:15
|
LL | asm!("foooo\x3A nop");
| ^^^^^^^^^^^^^
@ -291,7 +291,7 @@ LL | asm!("foooo\x3A nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:110:15
--> $DIR/named-asm-labels.rs:108:15
|
LL | asm!("fooooo:\u{000A} nop");
| ^^^^^^
@ -300,7 +300,7 @@ LL | asm!("fooooo:\u{000A} nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:111:15
--> $DIR/named-asm-labels.rs:109:15
|
LL | asm!("foooooo:\x0A nop");
| ^^^^^^^
@ -309,7 +309,7 @@ LL | asm!("foooooo:\x0A nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:115:14
--> $DIR/named-asm-labels.rs:113:14
|
LL | asm!("\x41\x42\x43\x3A\x20\x6E\x6F\x70");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -319,7 +319,7 @@ LL | asm!("\x41\x42\x43\x3A\x20\x6E\x6F\x70");
= note: the label may be declared in the expansion of a macro
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:123:13
--> $DIR/named-asm-labels.rs:121:13
|
LL | ab: nop // ab: does foo
| ^^
@ -328,7 +328,7 @@ LL | ab: nop // ab: does foo
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:144:19
--> $DIR/named-asm-labels.rs:142:19
|
LL | asm!("test_{}: nop", in(reg) 10);
| ^^^^^^^
@ -338,7 +338,7 @@ LL | asm!("test_{}: nop", in(reg) 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:146:15
--> $DIR/named-asm-labels.rs:144:15
|
LL | asm!("test_{}: nop", const 10);
| ^^^^^^^
@ -348,7 +348,7 @@ LL | asm!("test_{}: nop", const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:147:15
--> $DIR/named-asm-labels.rs:145:15
|
LL | asm!("test_{}: nop", sym main);
| ^^^^^^^
@ -358,7 +358,7 @@ LL | asm!("test_{}: nop", sym main);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:148:15
--> $DIR/named-asm-labels.rs:146:15
|
LL | asm!("{}_test: nop", const 10);
| ^^^^^^^
@ -368,7 +368,7 @@ LL | asm!("{}_test: nop", const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:149:15
--> $DIR/named-asm-labels.rs:147:15
|
LL | asm!("test_{}_test: nop", const 10);
| ^^^^^^^^^^^^
@ -378,7 +378,7 @@ LL | asm!("test_{}_test: nop", const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:150:15
--> $DIR/named-asm-labels.rs:148:15
|
LL | asm!("{}: nop", const 10);
| ^^
@ -388,7 +388,7 @@ LL | asm!("{}: nop", const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:152:15
--> $DIR/named-asm-labels.rs:150:15
|
LL | asm!("{uwu}: nop", uwu = const 10);
| ^^^^^
@ -398,7 +398,7 @@ LL | asm!("{uwu}: nop", uwu = const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:153:15
--> $DIR/named-asm-labels.rs:151:15
|
LL | asm!("{0}: nop", const 10);
| ^^^
@ -408,7 +408,7 @@ LL | asm!("{0}: nop", const 10);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:154:15
--> $DIR/named-asm-labels.rs:152:15
|
LL | asm!("{1}: nop", "/* {0} */", const 10, const 20);
| ^^^
@ -418,7 +418,7 @@ LL | asm!("{1}: nop", "/* {0} */", const 10, const 20);
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:157:14
--> $DIR/named-asm-labels.rs:155:14
|
LL | asm!(include_str!("named-asm-labels.s"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -428,7 +428,7 @@ LL | asm!(include_str!("named-asm-labels.s"));
= note: the label may be declared in the expansion of a macro
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:157:14
--> $DIR/named-asm-labels.rs:155:14
|
LL | asm!(include_str!("named-asm-labels.s"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -439,7 +439,7 @@ LL | asm!(include_str!("named-asm-labels.s"));
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:157:14
--> $DIR/named-asm-labels.rs:155:14
|
LL | asm!(include_str!("named-asm-labels.s"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -450,7 +450,7 @@ LL | asm!(include_str!("named-asm-labels.s"));
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:157:14
--> $DIR/named-asm-labels.rs:155:14
|
LL | asm!(include_str!("named-asm-labels.s"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -461,7 +461,7 @@ LL | asm!(include_str!("named-asm-labels.s"));
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:171:19
--> $DIR/named-asm-labels.rs:169:19
|
LL | asm!("warned: nop");
| ^^^^^^
@ -469,13 +469,13 @@ LL | asm!("warned: nop");
= help: only local labels of the form `<number>:` should be used in inline asm
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
note: the lint level is defined here
--> $DIR/named-asm-labels.rs:169:16
--> $DIR/named-asm-labels.rs:167:16
|
LL | #[warn(named_asm_labels)]
| ^^^^^^^^^^^^^^^^
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:180:17
--> $DIR/named-asm-labels.rs:178:17
|
LL | naked_asm!(".Lfoo: mov rax, {}; ret;", "nop", const 1)
| ^^^^^
@ -484,7 +484,7 @@ LL | naked_asm!(".Lfoo: mov rax, {}; ret;", "nop", const 1)
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:187:20
--> $DIR/named-asm-labels.rs:185:20
|
LL | unsafe { asm!(".Lbar: mov rax, {}; ret;", "nop", const 1, options(noreturn)) }
| ^^^^^
@ -493,7 +493,7 @@ LL | unsafe { asm!(".Lbar: mov rax, {}; ret;", "nop", const 1, options(noret
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:195:17
--> $DIR/named-asm-labels.rs:193:17
|
LL | naked_asm!(".Laaa: nop; ret;")
| ^^^^^
@ -502,7 +502,7 @@ LL | naked_asm!(".Laaa: nop; ret;")
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:205:21
--> $DIR/named-asm-labels.rs:203:21
|
LL | naked_asm!(".Lbbb: nop; ret;")
| ^^^^^
@ -511,7 +511,7 @@ LL | naked_asm!(".Lbbb: nop; ret;")
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:214:15
--> $DIR/named-asm-labels.rs:212:15
|
LL | asm!("closure1: nop");
| ^^^^^^^^
@ -520,7 +520,7 @@ LL | asm!("closure1: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:218:15
--> $DIR/named-asm-labels.rs:216:15
|
LL | asm!("closure2: nop");
| ^^^^^^^^
@ -529,7 +529,7 @@ LL | asm!("closure2: nop");
= note: see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information
error: avoid using named labels in inline assembly
--> $DIR/named-asm-labels.rs:228:19
--> $DIR/named-asm-labels.rs:226:19
|
LL | asm!("closure3: nop");
| ^^^^^^^^

View file

@ -1,7 +1,6 @@
//@ run-pass
//@ needs-asm-support
#![feature(naked_functions)]
#![allow(dead_code)]
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]

View file

@ -1,20 +0,0 @@
//@ needs-asm-support
use std::arch::naked_asm;
//~^ ERROR use of unstable library feature `naked_functions`
#[naked] //~ ERROR unsafe attribute used without unsafe
//~^ ERROR the `#[naked]` attribute is an experimental feature
extern "C" fn naked() {
naked_asm!("")
//~^ ERROR use of unstable library feature `naked_functions`
}
#[naked] //~ ERROR unsafe attribute used without unsafe
//~^ ERROR the `#[naked]` attribute is an experimental feature
extern "C" fn naked_2() -> isize {
naked_asm!("")
//~^ ERROR use of unstable library feature `naked_functions`
}
fn main() {}

View file

@ -1,75 +0,0 @@
error[E0658]: use of unstable library feature `naked_functions`
--> $DIR/feature-gate-naked_functions.rs:9:5
|
LL | naked_asm!("")
| ^^^^^^^^^
|
= note: see issue #90957 <https://github.com/rust-lang/rust/issues/90957> for more information
= help: add `#![feature(naked_functions)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `naked_functions`
--> $DIR/feature-gate-naked_functions.rs:16:5
|
LL | naked_asm!("")
| ^^^^^^^^^
|
= note: see issue #90957 <https://github.com/rust-lang/rust/issues/90957> for more information
= help: add `#![feature(naked_functions)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: unsafe attribute used without unsafe
--> $DIR/feature-gate-naked_functions.rs:6:3
|
LL | #[naked]
| ^^^^^ usage of unsafe attribute
|
help: wrap the attribute in `unsafe(...)`
|
LL | #[unsafe(naked)]
| +++++++ +
error: unsafe attribute used without unsafe
--> $DIR/feature-gate-naked_functions.rs:13:3
|
LL | #[naked]
| ^^^^^ usage of unsafe attribute
|
help: wrap the attribute in `unsafe(...)`
|
LL | #[unsafe(naked)]
| +++++++ +
error[E0658]: the `#[naked]` attribute is an experimental feature
--> $DIR/feature-gate-naked_functions.rs:6:1
|
LL | #[naked]
| ^^^^^^^^
|
= note: see issue #90957 <https://github.com/rust-lang/rust/issues/90957> for more information
= help: add `#![feature(naked_functions)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: the `#[naked]` attribute is an experimental feature
--> $DIR/feature-gate-naked_functions.rs:13:1
|
LL | #[naked]
| ^^^^^^^^
|
= note: see issue #90957 <https://github.com/rust-lang/rust/issues/90957> for more information
= help: add `#![feature(naked_functions)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `naked_functions`
--> $DIR/feature-gate-naked_functions.rs:3:5
|
LL | use std::arch::naked_asm;
| ^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #90957 <https://github.com/rust-lang/rust/issues/90957> for more information
= help: add `#![feature(naked_functions)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 7 previous errors
For more information about this error, try `rustc --explain E0658`.

View file

@ -1,7 +1,7 @@
//@ needs-asm-support
//@ only-x86_64
#![feature(naked_functions, rust_cold_cc)]
#![feature(rust_cold_cc)]
use std::arch::naked_asm;

View file

@ -1,8 +1,6 @@
//@ needs-asm-support
//@ only-x86_64
#![feature(naked_functions)]
use std::arch::naked_asm;
#[unsafe(naked)]

View file

@ -1,5 +1,5 @@
error[E0658]: `#[target_feature(/* ... */)]` is currently unstable on `#[naked]` functions
--> $DIR/feature-gate-naked_functions_target_feature.rs:9:1
--> $DIR/feature-gate-naked_functions_target_feature.rs:7:1
|
LL | #[target_feature(enable = "avx2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -2,9 +2,7 @@
//! because `#[inline]` is ignored for such functions.
#![crate_type = "lib"]
#![feature(linkage)]
#![feature(naked_functions)]
#![deny(unused_attributes)]
#[inline]

View file

@ -1,18 +1,18 @@
error: `#[inline]` is ignored on externally exported functions
--> $DIR/inline-exported.rs:10:1
--> $DIR/inline-exported.rs:8:1
|
LL | #[inline]
| ^^^^^^^^^
|
= help: externally exported functions are functions with `#[no_mangle]`, `#[export_name]`, or `#[linkage]`
note: the lint level is defined here
--> $DIR/inline-exported.rs:8:9
--> $DIR/inline-exported.rs:6:9
|
LL | #![deny(unused_attributes)]
| ^^^^^^^^^^^^^^^^^
error: `#[inline]` is ignored on externally exported functions
--> $DIR/inline-exported.rs:15:1
--> $DIR/inline-exported.rs:13:1
|
LL | #[inline]
| ^^^^^^^^^
@ -20,7 +20,7 @@ LL | #[inline]
= help: externally exported functions are functions with `#[no_mangle]`, `#[export_name]`, or `#[linkage]`
error: `#[inline]` is ignored on externally exported functions
--> $DIR/inline-exported.rs:20:1
--> $DIR/inline-exported.rs:18:1
|
LL | #[inline]
| ^^^^^^^^^

View file

@ -1,5 +1,4 @@
//@ needs-asm-support
#![feature(naked_functions)]
use std::arch::naked_asm;

View file

@ -1,5 +1,5 @@
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/error-with-naked.rs:6:1
--> $DIR/error-with-naked.rs:5:1
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^ the `track_caller` attribute is incompatible with `#[unsafe(naked)]`
@ -8,7 +8,7 @@ LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here
error[E0736]: attribute incompatible with `#[unsafe(naked)]`
--> $DIR/error-with-naked.rs:18:5
--> $DIR/error-with-naked.rs:17:5
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^ the `track_caller` attribute is incompatible with `#[unsafe(naked)]`
@ -17,13 +17,13 @@ LL | #[unsafe(naked)]
| ---------------- function marked with `#[unsafe(naked)]` here
error[E0737]: `#[track_caller]` requires Rust ABI
--> $DIR/error-with-naked.rs:6:1
--> $DIR/error-with-naked.rs:5:1
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^
error[E0737]: `#[track_caller]` requires Rust ABI
--> $DIR/error-with-naked.rs:18:5
--> $DIR/error-with-naked.rs:17:5
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^