Rollup merge of #134213 - folkertdev:stabilize-naked-functions, r=tgross35,Amanieu,traviscross
Stabilize `naked_functions` tracking issue: https://github.com/rust-lang/rust/issues/90957 request for stabilization on tracking issue: https://github.com/rust-lang/rust/issues/90957#issuecomment-2539270352 reference PR: https://github.com/rust-lang/reference/pull/1689 # Request for Stabilization Two years later, we're ready to try this again. Even though this issue is already marked as having passed FCP, given the amount of time that has passed and the changes in implementation strategy, we should follow the process again. ## Summary The `naked_functions` feature has two main parts: the `#[naked]` function attribute, and the `naked_asm!` macro. An example of a naked function: ```rust const THREE: usize = 3; #[naked] pub extern "sysv64" fn add_n(number: usize) -> usize { // SAFETY: the validity of the used registers // is guaranteed according to the "sysv64" ABI unsafe { core::arch::naked_asm!( "add rdi, {}", "mov rax, rdi", "ret", const THREE, ) } } ``` When the `#[naked]` attribute is applied to a function, the compiler won't emit a [function prologue](https://en.wikipedia.org/wiki/Function_prologue_and_epilogue) or epilogue when generating code for this function. This attribute is analogous to [`__attribute__((naked))`](https://developer.arm.com/documentation/100067/0608/Compiler-specific-Function--Variable--and-Type-Attributes/--attribute----naked---function-attribute) in C. The use of this feature allows the programmer to have precise control over the assembly that is generated for a given function. The body of a naked function must consist of a single `naked_asm!` invocation, a heavily restricted variant of the `asm!` macro: the only legal operands are `const` and `sym`, and the only legal options are `raw` and `att_syntax`. In lieu of specifying operands, the `naked_asm!` within a naked function relies on the function's calling convention to determine the validity of registers. ## Documentation The Rust Reference: https://github.com/rust-lang/reference/pull/1689 (Previous PR: https://github.com/rust-lang/reference/pull/1153) ## Tests * [tests/run-make/naked-symbol-visiblity](https://github.com/rust-lang/rust/tree/master/tests/codegen/naked-fn) verifies that `pub`, `#[no_mangle]` and `#[linkage = "..."]` work correctly for naked functions * [tests/codegen/naked-fn](https://github.com/rust-lang/rust/tree/master/tests/codegen/naked-fn) has tests for function alignment, use of generics, and validates the exact assembly output on linux, macos, windows and thumb * [tests/ui/asm/naked-*](https://github.com/rust-lang/rust/tree/master/tests/ui/asm) tests for incompatible attributes, generating errors around incorrect use of `naked_asm!`, etc ## Interaction with other (unstable) features ### [fn_align](https://github.com/rust-lang/rust/issues/82232) Combining `#[naked]` with `#[repr(align(N))]` works well, and is tested e.g. here - https://github.com/rust-lang/rust/blob/master/tests/codegen/naked-fn/aligned.rs - https://github.com/rust-lang/rust/blob/master/tests/codegen/naked-fn/min-function-alignment.rs It's tested extensively because we do need to explicitly support the `repr(align)` attribute (and make sure we e.g. don't mistake powers of two for number of bytes). ## History This feature was originally proposed in [RFC 1201](https://github.com/rust-lang/rfcs/pull/1201), filed on 2015-07-10 and accepted on 2016-03-21. Support for this feature was added in [#32410](https://github.com/rust-lang/rust/pull/32410), landing on 2016-03-23. Development languished for several years as it was realized that the semantics given in RFC 1201 were insufficiently specific. To address this, a minimal subset of naked functions was specified by [RFC 2972](https://github.com/rust-lang/rfcs/pull/2972), filed on 2020-08-07 and accepted on 2021-11-16. Prior to the acceptance of RFC 2972, all of the stricter behavior specified by RFC 2972 was implemented as a series of warn-by-default lints that would trigger on existing uses of the `naked` attribute; these lints became hard errors in [#93153](https://github.com/rust-lang/rust/pull/93153) on 2022-01-22. As a result, today RFC 2972 has completely superseded RFC 1201 in describing the semantics of the `naked` attribute. More recently, the `naked_asm!` macro was added to replace the earlier use of a heavily restricted `asm!` invocation. The `naked_asm!` name is clearer in error messages, and provides a place for documenting the specific requirements of inline assembly in naked functions. The implementation strategy was changed to emitting a global assembly block. In effect, an extern function ```rust extern "C" fn foo() { core::arch::naked_asm!("ret") } ``` is emitted as something similar to ```rust core::arch::global_asm!( "foo:", "ret" ); extern "C" { fn foo(); } ``` The codegen approach was chosen over the llvm naked function attribute because: - the rust compiler can guarantee the behavior (no sneaky additional instructions, no inlining, etc.) - behavior is the same on all backends (llvm, cranelift, gcc, etc) Finally, there is now an allow list of compatible attributes on naked functions, so that e.g. `#[inline]` is rejected with an error. The `#[target_feature]` attribute on naked functions was later made separately unstable, because implementing it is complex and we did not want to block naked functions themselves on how target features work on them. See also https://github.com/rust-lang/rust/issues/138568. relevant PRs for these recent changes - https://github.com/rust-lang/rust/pull/127853 - https://github.com/rust-lang/rust/pull/128651 - https://github.com/rust-lang/rust/pull/128004 - https://github.com/rust-lang/rust/pull/138570 - ### Various historical notes #### `noreturn` [RFC 2972](https://github.com/rust-lang/rfcs/blob/master/text/2972-constrained-naked.md) mentions that naked functions > must have a body which contains only a single asm!() statement which: > iii. must contain the noreturn option. Instead of `asm!`, the current implementation mandates that the body contain a single `naked_asm!` statement. The `naked_asm!` macro is a heavily restricted version of the `asm!` macro, making it easier to talk about and document the rules of assembly in naked functions and give dedicated error messages. For `naked_asm!`, the behavior of the `asm!`'s `noreturn` option is implicit. The `noreturn` option means that it is UB for control flow to fall through the end of the assembly block. With `asm!`, this option is usually used for blocks that diverge (and thus have no return and can be typed as `!`). With `naked_asm!`, the intent is different: usually naked funtions do return, but they must do so from within the assembly block. The `noreturn` option was used so that the compiler would not itself also insert a `ret` instruction at the very end. #### padding / `ud2` A `naked_asm!` block that violates the safety assumption that control flow must not fall through the end of the assembly block is UB. Because no return instruction is emitted, whatever bytes follow the naked function will be executed, resulting in truly undefined behavior. There has been discussion whether rustc should emit an invalid instruction (e.g. `ud2` on x86) after the `naked_asm!` block to at least fail early in the case of an invalid `naked_asm!`. It was however decided that it is more useful to guarantee that `#[naked]` functions NEVER contain any instructions besides those in the `naked_asm!` block. # unresolved questions None r? ``@Amanieu`` I've validated the tests on x86_64 and aarch64
This commit is contained in:
commit
1ca5e4f1c1
53 changed files with 165 additions and 294 deletions
|
@ -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)]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
negative_impls,
|
||||
rustc_attrs,
|
||||
decl_macro,
|
||||
naked_functions,
|
||||
f16,
|
||||
f128,
|
||||
asm_experimental_arch,
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(c_variadic)]
|
||||
#![feature(naked_functions)]
|
||||
#![no_std]
|
||||
|
||||
#[unsafe(naked)]
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
//@ only-x86_64
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(naked_functions, asm_const)]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![feature(naked_functions, linkage)]
|
||||
#![feature(linkage)]
|
||||
#![crate_type = "dylib"]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
//@ ignore-nvptx64
|
||||
//@ ignore-spirv
|
||||
|
||||
#![feature(naked_functions)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
|
|
@ -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!("");
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
//@ check-pass
|
||||
//@ needs-asm-support
|
||||
#![feature(naked_functions)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
//@ needs-asm-support
|
||||
#![feature(naked_functions)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
//@ build-pass
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(no_core, naked_functions)]
|
||||
#![feature(no_core)]
|
||||
#![no_core]
|
||||
|
||||
extern crate minicore;
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
//@ needs-asm-support
|
||||
//@ compile-flags: --test
|
||||
|
||||
#![feature(naked_functions)]
|
||||
#![feature(test)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
//@[x86_64] only-x86_64
|
||||
//@[aarch64] only-aarch64
|
||||
#![deny(unused)]
|
||||
#![feature(naked_functions)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
pub trait Trait {
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
//@ ignore-nvptx64
|
||||
//@ ignore-spirv
|
||||
|
||||
#![feature(naked_functions)]
|
||||
#![feature(asm_unwind, linkage)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
|
|
|
@ -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 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
//@ needs-asm-support
|
||||
#![feature(naked_functions)]
|
||||
#![feature(fn_align)]
|
||||
#![crate_type = "lib"]
|
||||
use std::arch::naked_asm;
|
||||
|
|
|
@ -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)]
|
||||
| ^^
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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");
|
||||
| ^^^^^^^^
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
//@ run-pass
|
||||
//@ needs-asm-support
|
||||
|
||||
#![feature(naked_functions)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
|
||||
|
|
|
@ -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() {}
|
|
@ -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`.
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
//@ needs-asm-support
|
||||
//@ only-x86_64
|
||||
|
||||
#![feature(naked_functions)]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
||||
#[unsafe(naked)]
|
||||
|
|
|
@ -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")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
//! because `#[inline]` is ignored for such functions.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
#![feature(linkage)]
|
||||
#![feature(naked_functions)]
|
||||
#![deny(unused_attributes)]
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -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]
|
||||
| ^^^^^^^^^
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
//@ needs-asm-support
|
||||
#![feature(naked_functions)]
|
||||
|
||||
use std::arch::naked_asm;
|
||||
|
||||
|
|
|
@ -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]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue