Rollup merge of #144080 - jieyouxu:realign, r=BoxyUwU

Mitigate `#[align]` name resolution ambiguity regression with a rename

Mitigates beta regression rust-lang/rust#143834 after a beta backport.

### Background on the beta regression

The name resolution regression arises due to rust-lang/rust#142507 adding a new feature-gated built-in attribute named `#[align]`. However, unfortunately even [introducing new feature-gated unstable built-in attributes can break user code](https://www.github.com/rust-lang/rust/issues/134963) such as

```rs
macro_rules! align {
    () => {
        /* .. */
    };
}

pub(crate) use align; // `use` here becomes ambiguous
```

### Mitigation approach

This PR renames `#[align]` to `#[rustc_align]` to mitigate the beta regression by:

1. Undoing the introduction of a new built-in attribute with a common name, i.e. `#[align]`.
2. Renaming `#[align]` to `#[rustc_align]`. The renamed attribute being `rustc_align` will not introduce new stable breakages, as attributes beginning with `rustc` are reserved and perma-unstable. This does mean existing nightly code using `fn_align` feature will additionally need to specify `#![feature(rustc_attrs)]`.

This PR is very much a short-term mitigation to alleviate time pressure from having to fully fix the current limitation of inevitable name resolution regressions that would arise from adding any built-in attributes. Long-term solutions are discussed in [#t-lang > namespacing macro attrs to reduce conflicts with new adds](https://rust-lang.zulipchat.com/#narrow/channel/213817-t-lang/topic/namespacing.20macro.20attrs.20to.20reduce.20conflicts.20with.20new.20adds/with/529249622).

### Alternative mitigation options

[Various mitigation options were considered during the compiler triage meeting](https://github.com/rust-lang/rust/issues/143834#issuecomment-3084415277), and those consideration are partly reproduced here:

- Reverting the PR doesn't seem very minimal/trivial, and carries risks of its own.
- Rename to a less-common but aim-to-stabilization name is itself not safe nor convenient, because (1) that risks introducing new regressions (i.e. ambiguity against the new name), and (2) lang would have to FCP the new name hastily for the mitigation to land timely and have a chance to be backported. This also makes the path towards stabilization annoying.
- Rename the attribute to a rustc attribute, which will be perma-unstable and does not cause new ambiguities in stable code.
    - This alleviates the time pressure to address *this* regression, or for lang to have to rush an FCP for some new name that can still break user code.
    - This avoids backing out a whole implementation.

### Review advice

This PR is best reviewed commit-by-commit.

- Commit 1 adds a test `tests/ui/attributes/fn-align-nameres-ambiguity-143834.rs` which demonstrates the current name resolution regression re. `align`. This test fails against current master.
- Commit 2 carries out the renames and test reblesses. Notably, commit 2 will cause `tests/ui/attributes/fn-align-nameres-ambiguity-143834.rs` to change from fail (nameres regression) to pass.

This PR, if the approach still seems acceptable, will need a beta-backport to address the beta regression.
This commit is contained in:
许杰友 Jieyou Xu (Joe)
2025-07-22 00:54:28 +08:00
committed by GitHub
24 changed files with 285 additions and 227 deletions

View File

@@ -234,6 +234,7 @@ pub enum CfgEntry {
pub enum AttributeKind {
// tidy-alphabetical-start
/// Represents `#[align(N)]`.
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
Align { align: Align, span: Span },
/// Represents `#[rustc_allow_const_fn_unstable]`.

View File

@@ -177,7 +177,8 @@ impl<S: Stage> AttributeParser<S> for NakedParser {
sym::instruction_set,
sym::repr,
sym::rustc_std_internal_symbol,
sym::align,
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
sym::rustc_align,
// obviously compatible with self
sym::naked,
// documentation

View File

@@ -274,7 +274,7 @@ fn parse_alignment(node: &LitKind) -> Result<Align, &'static str> {
pub(crate) struct AlignParser(Option<(Align, Span)>);
impl AlignParser {
const PATH: &'static [Symbol] = &[sym::align];
const PATH: &'static [Symbol] = &[sym::rustc_align];
const TEMPLATE: AttributeTemplate = template!(List: "<alignment in bytes>");
fn parse<'c, S: Stage>(

View File

@@ -490,7 +490,8 @@ pub static BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
),
ungated!(no_link, Normal, template!(Word), WarnFollowing, EncodeCrossCrate::No),
ungated!(repr, Normal, template!(List: "C"), DuplicatesOk, EncodeCrossCrate::No),
gated!(align, Normal, template!(List: "alignment"), DuplicatesOk, EncodeCrossCrate::No, fn_align, experimental!(align)),
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
gated!(rustc_align, Normal, template!(List: "alignment"), DuplicatesOk, EncodeCrossCrate::No, fn_align, experimental!(rustc_align)),
ungated!(unsafe(Edition2024) export_name, Normal, template!(NameValueStr: "name"), FutureWarnPreceding, EncodeCrossCrate::No),
ungated!(unsafe(Edition2024) link_section, Normal, template!(NameValueStr: "name"), FutureWarnPreceding, EncodeCrossCrate::No),
ungated!(unsafe(Edition2024) no_mangle, Normal, template!(Word), WarnFollowing, EncodeCrossCrate::No),

View File

@@ -70,6 +70,7 @@ pub struct CodegenFnAttrs {
/// switching between multiple instruction sets.
pub instruction_set: Option<InstructionSetAttr>,
/// The `#[align(...)]` attribute. Determines the alignment of the function body.
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
pub alignment: Option<Align>,
/// The `#[patchable_function_entry(...)]` attribute. Indicates how many nops should be around
/// the function entry.

View File

@@ -294,7 +294,9 @@ pub fn check_builtin_meta_item(
| sym::rustc_paren_sugar
| sym::type_const
| sym::repr
| sym::align
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres
// ambiguity
| sym::rustc_align
| sym::deprecated
| sym::optimize
| sym::pointee

View File

@@ -14,7 +14,7 @@ passes_abi_of =
fn_abi_of({$fn_name}) = {$fn_abi}
passes_align_attr_application =
`#[align(...)]` should be applied to a function item
`#[rustc_align(...)]` should be applied to a function item
.label = not a function item
passes_align_on_fields =
@@ -22,7 +22,7 @@ passes_align_on_fields =
.warn = {-passes_previously_accepted}
passes_align_should_be_repr_align =
`#[align(...)]` is not supported on {$item} items
`#[rustc_align(...)]` is not supported on {$item} items
.suggestion = use `#[repr(align(...))]` instead
passes_allow_incoherent_impl =
@@ -605,7 +605,7 @@ passes_repr_align_greater_than_target_max =
passes_repr_align_should_be_align =
`#[repr(align(...))]` is not supported on {$item} items
.help = use `#[align(...)]` instead
.help = use `#[rustc_align(...)]` instead
passes_repr_conflicting =
conflicting representation hints

View File

@@ -1970,6 +1970,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
}
/// Checks if the `#[align]` attributes on `item` are valid.
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
fn check_align(
&self,
span: Span,

View File

@@ -1809,6 +1809,8 @@ symbols! {
rust_out,
rustc,
rustc_abi,
// FIXME(#82232, #143834): temporary name to mitigate `#[align]` nameres ambiguity
rustc_align,
rustc_allocator,
rustc_allocator_zeroed,
rustc_allow_const_fn_unstable,

View File

@@ -1,15 +1,19 @@
//@compile-flags: -Zmin-function-alignment=8
// FIXME(rust-lang/rust#82232, rust-lang/rust#143834): temporarily renamed to mitigate `#[align]`
// nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
// When a function uses `align(N)`, the function address should be a multiple of `N`.
#[align(256)]
#[rustc_align(256)]
fn foo() {}
#[align(16)]
#[rustc_align(16)]
fn bar() {}
#[align(4)]
#[rustc_align(4)]
fn baz() {}
fn main() {

View File

@@ -3,11 +3,13 @@
//@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368)
#![crate_type = "lib"]
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
// CHECK: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
pub fn fn_align() {}
pub struct A;
@@ -15,12 +17,12 @@ pub struct A;
impl A {
// CHECK: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
pub fn method_align(self) {}
// CHECK: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
pub fn associated_fn() {}
}
@@ -29,18 +31,18 @@ trait T: Sized {
fn trait_method(self) {}
#[align(8)]
#[rustc_align(8)]
fn trait_method_inherit_low(self);
#[align(32)]
#[rustc_align(32)]
fn trait_method_inherit_high(self);
#[align(32)]
#[rustc_align(32)]
fn trait_method_inherit_default(self) {}
#[align(4)]
#[align(128)]
#[align(8)]
#[rustc_align(4)]
#[rustc_align(128)]
#[rustc_align(8)]
fn inherit_highest(self) {}
}
@@ -48,27 +50,27 @@ impl T for A {
// CHECK-LABEL: trait_fn
// CHECK-SAME: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
fn trait_fn() {}
// CHECK-LABEL: trait_method
// CHECK-SAME: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
fn trait_method(self) {}
// The prototype's align is ignored because the align here is higher.
// CHECK-LABEL: trait_method_inherit_low
// CHECK-SAME: align 16
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
fn trait_method_inherit_low(self) {}
// The prototype's align is used because it is higher.
// CHECK-LABEL: trait_method_inherit_high
// CHECK-SAME: align 32
#[unsafe(no_mangle)]
#[align(16)]
#[rustc_align(16)]
fn trait_method_inherit_high(self) {}
// The prototype's align inherited.
@@ -81,8 +83,8 @@ impl T for A {
// CHECK-LABEL: inherit_highest
// CHECK-SAME: align 128
#[unsafe(no_mangle)]
#[align(32)]
#[align(64)]
#[rustc_align(32)]
#[rustc_align(64)]
fn inherit_highest(self) {}
}
@@ -90,7 +92,7 @@ trait HasDefaultImpl: Sized {
// CHECK-LABEL: inherit_from_default_method
// CHECK-LABEL: inherit_from_default_method
// CHECK-SAME: align 32
#[align(32)]
#[rustc_align(32)]
fn inherit_from_default_method(self) {}
}
@@ -101,35 +103,35 @@ impl HasDefaultImpl for InstantiateDefaultMethods {}
// CHECK-LABEL: align_specified_twice_1
// CHECK-SAME: align 64
#[unsafe(no_mangle)]
#[align(32)]
#[align(64)]
#[rustc_align(32)]
#[rustc_align(64)]
pub fn align_specified_twice_1() {}
// CHECK-LABEL: align_specified_twice_2
// CHECK-SAME: align 128
#[unsafe(no_mangle)]
#[align(128)]
#[align(32)]
#[rustc_align(128)]
#[rustc_align(32)]
pub fn align_specified_twice_2() {}
// CHECK-LABEL: align_specified_twice_3
// CHECK-SAME: align 256
#[unsafe(no_mangle)]
#[align(32)]
#[align(256)]
#[rustc_align(32)]
#[rustc_align(256)]
pub fn align_specified_twice_3() {}
const _: () = {
// CHECK-LABEL: align_unmangled
// CHECK-SAME: align 256
#[unsafe(no_mangle)]
#[align(32)]
#[align(256)]
#[rustc_align(32)]
#[rustc_align(256)]
extern "C" fn align_unmangled() {}
};
unsafe extern "C" {
#[align(256)]
#[rustc_align(256)]
fn align_unmangled();
}
@@ -137,5 +139,5 @@ unsafe extern "C" {
// CHECK-LABEL: async_align
// CHECK-SAME: align 64
#[unsafe(no_mangle)]
#[align(64)]
#[rustc_align(64)]
pub async fn async_align() {}

View File

@@ -5,6 +5,8 @@
//@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368)
#![crate_type = "lib"]
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
// Functions without explicit alignment use the global minimum.
@@ -21,7 +23,7 @@ pub fn no_explicit_align() {}
// align16: align 16
// align1024: align 1024
#[no_mangle]
#[align(8)]
#[rustc_align(8)]
pub fn lower_align() {}
// the higher value of min-function-alignment and the align attribute wins out
@@ -30,7 +32,7 @@ pub fn lower_align() {}
// align16: align 32
// align1024: align 1024
#[no_mangle]
#[align(32)]
#[rustc_align(32)]
pub fn higher_align() {}
// cold functions follow the same rules as other functions

View File

@@ -4,12 +4,15 @@
//@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368)
#![crate_type = "lib"]
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
use std::arch::naked_asm;
// CHECK: .balign 16
// CHECK-LABEL: naked_empty:
#[align(16)]
#[rustc_align(16)]
#[no_mangle]
#[unsafe(naked)]
pub extern "C" fn naked_empty() {

View File

@@ -3,6 +3,8 @@
//@ ignore-arm no "ret" mnemonic
//@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368)
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
#![crate_type = "lib"]
@@ -17,7 +19,7 @@ pub extern "C" fn naked_no_explicit_align() {
// CHECK: .balign 16
#[no_mangle]
#[align(8)]
#[rustc_align(8)]
#[unsafe(naked)]
pub extern "C" fn naked_lower_align() {
core::arch::naked_asm!("ret")
@@ -25,7 +27,7 @@ pub extern "C" fn naked_lower_align() {
// CHECK: .balign 32
#[no_mangle]
#[align(32)]
#[rustc_align(32)]
#[unsafe(naked)]
pub extern "C" fn naked_higher_align() {
core::arch::naked_asm!("ret")

View File

@@ -1,5 +1,9 @@
//@ needs-asm-support
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
#![crate_type = "lib"]
use std::arch::naked_asm;
@@ -21,7 +25,7 @@ extern "C" fn example2() {
#[repr(C)]
//~^ ERROR attribute should be applied to a struct, enum, or union [E0517]
#[align(16)]
#[rustc_align(16)]
#[unsafe(naked)]
extern "C" fn example3() {
//~^ NOTE not a struct, enum, or union

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:6:8
--> $DIR/naked-with-invalid-repr-attr.rs:10: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:14:8
--> $DIR/naked-with-invalid-repr-attr.rs:18: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:22:8
--> $DIR/naked-with-invalid-repr-attr.rs:26:8
|
LL | #[repr(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:36: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:36: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:46:8
|
LL | #[repr(u8)]
| ^^

View File

@@ -1,12 +1,15 @@
//@ run-pass
//@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368)
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
trait Test {
#[align(4096)]
#[rustc_align(4096)]
fn foo(&self);
#[align(4096)]
#[rustc_align(4096)]
fn foo1(&self);
}

View File

@@ -0,0 +1,19 @@
// Anti-regression test to demonstrate that at least we mitigated breakage from adding a new
// `#[align]` built-in attribute.
//
// See https://github.com/rust-lang/rust/issues/143834.
//@ check-pass
// Needs edition >= 2018 macro use behavior.
//@ edition: 2018
macro_rules! align {
() => {
/* .. */
};
}
pub(crate) use align;
fn main() {}

View File

@@ -3,6 +3,7 @@
#![feature(rustc_attrs)]
#![feature(rustc_allow_const_fn_unstable)]
#![feature(allow_internal_unstable)]
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(fn_align)]
#![feature(optimize_attribute)]
#![feature(dropck_eyepatch)]
@@ -53,7 +54,7 @@
#[inline = 5]
//~^ ERROR valid forms for the attribute are
//~| WARN this was previously accepted by the compiler
#[align]
#[rustc_align]
//~^ ERROR malformed
#[optimize]
//~^ ERROR malformed

View File

@@ -1,5 +1,5 @@
error[E0539]: malformed `cfg` attribute input
--> $DIR/malformed-attrs.rs:102:1
--> $DIR/malformed-attrs.rs:103:1
|
LL | #[cfg]
| ^^^^^^
@@ -8,7 +8,7 @@ LL | #[cfg]
| help: must be of the form: `#[cfg(predicate)]`
error: malformed `cfg_attr` attribute input
--> $DIR/malformed-attrs.rs:104:1
--> $DIR/malformed-attrs.rs:105:1
|
LL | #[cfg_attr]
| ^^^^^^^^^^^
@@ -20,67 +20,67 @@ LL | #[cfg_attr(condition, attribute, other_attribute, ...)]
| ++++++++++++++++++++++++++++++++++++++++++++
error[E0463]: can't find crate for `wloop`
--> $DIR/malformed-attrs.rs:211:1
--> $DIR/malformed-attrs.rs:212:1
|
LL | extern crate wloop;
| ^^^^^^^^^^^^^^^^^^^ can't find crate
error: malformed `windows_subsystem` attribute input
--> $DIR/malformed-attrs.rs:29:1
--> $DIR/malformed-attrs.rs:30:1
|
LL | #![windows_subsystem]
| ^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#![windows_subsystem = "windows|console"]`
error: malformed `crate_name` attribute input
--> $DIR/malformed-attrs.rs:74:1
--> $DIR/malformed-attrs.rs:75:1
|
LL | #[crate_name]
| ^^^^^^^^^^^^^ help: must be of the form: `#[crate_name = "name"]`
error: malformed `no_sanitize` attribute input
--> $DIR/malformed-attrs.rs:92:1
--> $DIR/malformed-attrs.rs:93:1
|
LL | #[no_sanitize]
| ^^^^^^^^^^^^^^ help: must be of the form: `#[no_sanitize(address, kcfi, memory, thread)]`
error: malformed `proc_macro` attribute input
--> $DIR/malformed-attrs.rs:99:1
--> $DIR/malformed-attrs.rs:100:1
|
LL | #[proc_macro = 18]
| ^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[proc_macro]`
error: malformed `instruction_set` attribute input
--> $DIR/malformed-attrs.rs:106:1
--> $DIR/malformed-attrs.rs:107:1
|
LL | #[instruction_set]
| ^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[instruction_set(set)]`
error: malformed `patchable_function_entry` attribute input
--> $DIR/malformed-attrs.rs:108:1
--> $DIR/malformed-attrs.rs:109:1
|
LL | #[patchable_function_entry]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[patchable_function_entry(prefix_nops = m, entry_nops = n)]`
error: malformed `coroutine` attribute input
--> $DIR/malformed-attrs.rs:111:5
--> $DIR/malformed-attrs.rs:112:5
|
LL | #[coroutine = 63] || {}
| ^^^^^^^^^^^^^^^^^ help: must be of the form: `#[coroutine]`
error: malformed `proc_macro_attribute` attribute input
--> $DIR/malformed-attrs.rs:116:1
--> $DIR/malformed-attrs.rs:117:1
|
LL | #[proc_macro_attribute = 19]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[proc_macro_attribute]`
error: malformed `proc_macro_derive` attribute input
--> $DIR/malformed-attrs.rs:123:1
--> $DIR/malformed-attrs.rs:124:1
|
LL | #[proc_macro_derive]
| ^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[proc_macro_derive(TraitName, /*opt*/ attributes(name1, name2, ...))]`
error: malformed `must_not_suspend` attribute input
--> $DIR/malformed-attrs.rs:132:1
--> $DIR/malformed-attrs.rs:133:1
|
LL | #[must_not_suspend()]
| ^^^^^^^^^^^^^^^^^^^^^
@@ -95,67 +95,67 @@ LL + #[must_not_suspend]
|
error: malformed `cfi_encoding` attribute input
--> $DIR/malformed-attrs.rs:134:1
--> $DIR/malformed-attrs.rs:135:1
|
LL | #[cfi_encoding]
| ^^^^^^^^^^^^^^^ help: must be of the form: `#[cfi_encoding = "encoding"]`
error: malformed `linkage` attribute input
--> $DIR/malformed-attrs.rs:173:5
--> $DIR/malformed-attrs.rs:174:5
|
LL | #[linkage]
| ^^^^^^^^^^ help: must be of the form: `#[linkage = "external|internal|..."]`
error: malformed `allow` attribute input
--> $DIR/malformed-attrs.rs:178:1
--> $DIR/malformed-attrs.rs:179:1
|
LL | #[allow]
| ^^^^^^^^ help: must be of the form: `#[allow(lint1, lint2, ..., /*opt*/ reason = "...")]`
error: malformed `expect` attribute input
--> $DIR/malformed-attrs.rs:180:1
--> $DIR/malformed-attrs.rs:181:1
|
LL | #[expect]
| ^^^^^^^^^ help: must be of the form: `#[expect(lint1, lint2, ..., /*opt*/ reason = "...")]`
error: malformed `warn` attribute input
--> $DIR/malformed-attrs.rs:182:1
--> $DIR/malformed-attrs.rs:183:1
|
LL | #[warn]
| ^^^^^^^ help: must be of the form: `#[warn(lint1, lint2, ..., /*opt*/ reason = "...")]`
error: malformed `deny` attribute input
--> $DIR/malformed-attrs.rs:184:1
--> $DIR/malformed-attrs.rs:185:1
|
LL | #[deny]
| ^^^^^^^ help: must be of the form: `#[deny(lint1, lint2, ..., /*opt*/ reason = "...")]`
error: malformed `forbid` attribute input
--> $DIR/malformed-attrs.rs:186:1
--> $DIR/malformed-attrs.rs:187:1
|
LL | #[forbid]
| ^^^^^^^^^ help: must be of the form: `#[forbid(lint1, lint2, ..., /*opt*/ reason = "...")]`
error: malformed `debugger_visualizer` attribute input
--> $DIR/malformed-attrs.rs:188:1
--> $DIR/malformed-attrs.rs:189:1
|
LL | #[debugger_visualizer]
| ^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[debugger_visualizer(natvis_file = "...", gdb_script_file = "...")]`
error: malformed `thread_local` attribute input
--> $DIR/malformed-attrs.rs:203:1
--> $DIR/malformed-attrs.rs:204:1
|
LL | #[thread_local()]
| ^^^^^^^^^^^^^^^^^ help: must be of the form: `#[thread_local]`
error: malformed `no_link` attribute input
--> $DIR/malformed-attrs.rs:207:1
--> $DIR/malformed-attrs.rs:208:1
|
LL | #[no_link()]
| ^^^^^^^^^^^^ help: must be of the form: `#[no_link]`
error: malformed `macro_use` attribute input
--> $DIR/malformed-attrs.rs:209:1
--> $DIR/malformed-attrs.rs:210:1
|
LL | #[macro_use = 1]
| ^^^^^^^^^^^^^^^^
@@ -170,7 +170,7 @@ LL + #[macro_use]
|
error: malformed `macro_export` attribute input
--> $DIR/malformed-attrs.rs:214:1
--> $DIR/malformed-attrs.rs:215:1
|
LL | #[macro_export = 18]
| ^^^^^^^^^^^^^^^^^^^^
@@ -185,31 +185,31 @@ LL + #[macro_export]
|
error: malformed `allow_internal_unsafe` attribute input
--> $DIR/malformed-attrs.rs:216:1
--> $DIR/malformed-attrs.rs:217:1
|
LL | #[allow_internal_unsafe = 1]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[allow_internal_unsafe]`
error: the `#[proc_macro]` attribute is only usable with crates of the `proc-macro` crate type
--> $DIR/malformed-attrs.rs:99:1
--> $DIR/malformed-attrs.rs:100:1
|
LL | #[proc_macro = 18]
| ^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_attribute]` attribute is only usable with crates of the `proc-macro` crate type
--> $DIR/malformed-attrs.rs:116:1
--> $DIR/malformed-attrs.rs:117:1
|
LL | #[proc_macro_attribute = 19]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute is only usable with crates of the `proc-macro` crate type
--> $DIR/malformed-attrs.rs:123:1
--> $DIR/malformed-attrs.rs:124:1
|
LL | #[proc_macro_derive]
| ^^^^^^^^^^^^^^^^^^^^
error[E0658]: allow_internal_unsafe side-steps the unsafe_code lint
--> $DIR/malformed-attrs.rs:216:1
--> $DIR/malformed-attrs.rs:217:1
|
LL | #[allow_internal_unsafe = 1]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -218,7 +218,7 @@ LL | #[allow_internal_unsafe = 1]
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: valid forms for the attribute are `#[doc(hidden|inline|...)]` and `#[doc = "string"]`
--> $DIR/malformed-attrs.rs:43:1
--> $DIR/malformed-attrs.rs:44:1
|
LL | #[doc]
| ^^^^^^
@@ -228,7 +228,7 @@ LL | #[doc]
= note: `#[deny(ill_formed_attribute_input)]` on by default
error: valid forms for the attribute are `#[doc(hidden|inline|...)]` and `#[doc = "string"]`
--> $DIR/malformed-attrs.rs:76:1
--> $DIR/malformed-attrs.rs:77:1
|
LL | #[doc]
| ^^^^^^
@@ -237,7 +237,7 @@ LL | #[doc]
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error: attribute must be of the form `#[link(name = "...", /*opt*/ kind = "dylib|static|...", /*opt*/ wasm_import_module = "...", /*opt*/ import_name_type = "decorated|noprefix|undecorated")]`
--> $DIR/malformed-attrs.rs:83:1
--> $DIR/malformed-attrs.rs:84:1
|
LL | #[link]
| ^^^^^^^
@@ -246,7 +246,7 @@ LL | #[link]
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error: invalid argument
--> $DIR/malformed-attrs.rs:188:1
--> $DIR/malformed-attrs.rs:189:1
|
LL | #[debugger_visualizer]
| ^^^^^^^^^^^^^^^^^^^^^^
@@ -256,7 +256,7 @@ LL | #[debugger_visualizer]
= note: expected: `gdb_script_file = "..."`
error[E0565]: malformed `omit_gdb_pretty_printer_section` attribute input
--> $DIR/malformed-attrs.rs:26:1
--> $DIR/malformed-attrs.rs:27:1
|
LL | #![omit_gdb_pretty_printer_section = 1]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---^
@@ -265,25 +265,25 @@ LL | #![omit_gdb_pretty_printer_section = 1]
| help: must be of the form: `#[omit_gdb_pretty_printer_section]`
error[E0539]: malformed `export_name` attribute input
--> $DIR/malformed-attrs.rs:32:1
--> $DIR/malformed-attrs.rs:33:1
|
LL | #[unsafe(export_name)]
| ^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[export_name = "name"]`
error: `rustc_allow_const_fn_unstable` expects a list of feature names
--> $DIR/malformed-attrs.rs:34:1
--> $DIR/malformed-attrs.rs:35:1
|
LL | #[rustc_allow_const_fn_unstable]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `allow_internal_unstable` expects a list of feature names
--> $DIR/malformed-attrs.rs:37:1
--> $DIR/malformed-attrs.rs:38:1
|
LL | #[allow_internal_unstable]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0539]: malformed `rustc_confusables` attribute input
--> $DIR/malformed-attrs.rs:39:1
--> $DIR/malformed-attrs.rs:40:1
|
LL | #[rustc_confusables]
| ^^^^^^^^^^^^^^^^^^^^
@@ -292,7 +292,7 @@ LL | #[rustc_confusables]
| help: must be of the form: `#[rustc_confusables("name1", "name2", ...)]`
error[E0539]: malformed `deprecated` attribute input
--> $DIR/malformed-attrs.rs:41:1
--> $DIR/malformed-attrs.rs:42:1
|
LL | #[deprecated = 5]
| ^^^^^^^^^^^^^^^-^
@@ -312,13 +312,13 @@ LL + #[deprecated]
|
error[E0539]: malformed `rustc_macro_transparency` attribute input
--> $DIR/malformed-attrs.rs:46:1
--> $DIR/malformed-attrs.rs:47:1
|
LL | #[rustc_macro_transparency]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[rustc_macro_transparency = "transparent|semitransparent|opaque"]`
error[E0539]: malformed `repr` attribute input
--> $DIR/malformed-attrs.rs:48:1
--> $DIR/malformed-attrs.rs:49:1
|
LL | #[repr]
| ^^^^^^^
@@ -327,7 +327,7 @@ LL | #[repr]
| help: must be of the form: `#[repr(C | Rust | align(...) | packed(...) | <integer type> | transparent)]`
error[E0565]: malformed `rustc_as_ptr` attribute input
--> $DIR/malformed-attrs.rs:51:1
--> $DIR/malformed-attrs.rs:52:1
|
LL | #[rustc_as_ptr = 5]
| ^^^^^^^^^^^^^^^---^
@@ -335,17 +335,17 @@ LL | #[rustc_as_ptr = 5]
| | didn't expect any arguments here
| help: must be of the form: `#[rustc_as_ptr]`
error[E0539]: malformed `align` attribute input
--> $DIR/malformed-attrs.rs:56:1
error[E0539]: malformed `rustc_align` attribute input
--> $DIR/malformed-attrs.rs:57:1
|
LL | #[align]
| ^^^^^^^^
LL | #[rustc_align]
| ^^^^^^^^^^^^^^
| |
| expected this to be a list
| help: must be of the form: `#[align(<alignment in bytes>)]`
| help: must be of the form: `#[rustc_align(<alignment in bytes>)]`
error[E0539]: malformed `optimize` attribute input
--> $DIR/malformed-attrs.rs:58:1
--> $DIR/malformed-attrs.rs:59:1
|
LL | #[optimize]
| ^^^^^^^^^^^
@@ -354,7 +354,7 @@ LL | #[optimize]
| help: must be of the form: `#[optimize(size|speed|none)]`
error[E0565]: malformed `cold` attribute input
--> $DIR/malformed-attrs.rs:60:1
--> $DIR/malformed-attrs.rs:61:1
|
LL | #[cold = 1]
| ^^^^^^^---^
@@ -363,13 +363,13 @@ LL | #[cold = 1]
| help: must be of the form: `#[cold]`
error: valid forms for the attribute are `#[must_use = "reason"]` and `#[must_use]`
--> $DIR/malformed-attrs.rs:62:1
--> $DIR/malformed-attrs.rs:63:1
|
LL | #[must_use()]
| ^^^^^^^^^^^^^
error[E0565]: malformed `no_mangle` attribute input
--> $DIR/malformed-attrs.rs:64:1
--> $DIR/malformed-attrs.rs:65:1
|
LL | #[no_mangle = 1]
| ^^^^^^^^^^^^---^
@@ -378,7 +378,7 @@ LL | #[no_mangle = 1]
| help: must be of the form: `#[no_mangle]`
error[E0565]: malformed `naked` attribute input
--> $DIR/malformed-attrs.rs:66:1
--> $DIR/malformed-attrs.rs:67:1
|
LL | #[unsafe(naked())]
| ^^^^^^^^^^^^^^--^^
@@ -387,7 +387,7 @@ LL | #[unsafe(naked())]
| help: must be of the form: `#[naked]`
error[E0565]: malformed `track_caller` attribute input
--> $DIR/malformed-attrs.rs:68:1
--> $DIR/malformed-attrs.rs:69:1
|
LL | #[track_caller()]
| ^^^^^^^^^^^^^^--^
@@ -396,13 +396,13 @@ LL | #[track_caller()]
| help: must be of the form: `#[track_caller]`
error[E0539]: malformed `export_name` attribute input
--> $DIR/malformed-attrs.rs:70:1
--> $DIR/malformed-attrs.rs:71:1
|
LL | #[export_name()]
| ^^^^^^^^^^^^^^^^ help: must be of the form: `#[export_name = "name"]`
error[E0805]: malformed `used` attribute input
--> $DIR/malformed-attrs.rs:72:1
--> $DIR/malformed-attrs.rs:73:1
|
LL | #[used()]
| ^^^^^^--^
@@ -418,7 +418,7 @@ LL + #[used]
|
error[E0539]: malformed `target_feature` attribute input
--> $DIR/malformed-attrs.rs:79:1
--> $DIR/malformed-attrs.rs:80:1
|
LL | #[target_feature]
| ^^^^^^^^^^^^^^^^^
@@ -427,7 +427,7 @@ LL | #[target_feature]
| help: must be of the form: `#[target_feature(enable = "feat1, feat2")]`
error[E0565]: malformed `export_stable` attribute input
--> $DIR/malformed-attrs.rs:81:1
--> $DIR/malformed-attrs.rs:82:1
|
LL | #[export_stable = 1]
| ^^^^^^^^^^^^^^^^---^
@@ -436,19 +436,19 @@ LL | #[export_stable = 1]
| help: must be of the form: `#[export_stable]`
error[E0539]: malformed `link_name` attribute input
--> $DIR/malformed-attrs.rs:86:1
--> $DIR/malformed-attrs.rs:87:1
|
LL | #[link_name]
| ^^^^^^^^^^^^ help: must be of the form: `#[link_name = "name"]`
error[E0539]: malformed `link_section` attribute input
--> $DIR/malformed-attrs.rs:88:1
--> $DIR/malformed-attrs.rs:89:1
|
LL | #[link_section]
| ^^^^^^^^^^^^^^^ help: must be of the form: `#[link_section = "name"]`
error[E0539]: malformed `coverage` attribute input
--> $DIR/malformed-attrs.rs:90:1
--> $DIR/malformed-attrs.rs:91:1
|
LL | #[coverage]
| ^^^^^^^^^^^ this attribute is only valid with either `on` or `off` as an argument
@@ -461,7 +461,7 @@ LL | #[coverage(on)]
| ++++
error[E0565]: malformed `no_implicit_prelude` attribute input
--> $DIR/malformed-attrs.rs:97:1
--> $DIR/malformed-attrs.rs:98:1
|
LL | #[no_implicit_prelude = 23]
| ^^^^^^^^^^^^^^^^^^^^^^----^
@@ -470,7 +470,7 @@ LL | #[no_implicit_prelude = 23]
| help: must be of the form: `#[no_implicit_prelude]`
error[E0539]: malformed `must_use` attribute input
--> $DIR/malformed-attrs.rs:119:1
--> $DIR/malformed-attrs.rs:120:1
|
LL | #[must_use = 1]
| ^^^^^^^^^^^^^-^
@@ -487,7 +487,7 @@ LL + #[must_use]
|
error[E0539]: malformed `rustc_layout_scalar_valid_range_start` attribute input
--> $DIR/malformed-attrs.rs:128:1
--> $DIR/malformed-attrs.rs:129:1
|
LL | #[rustc_layout_scalar_valid_range_start]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -496,7 +496,7 @@ LL | #[rustc_layout_scalar_valid_range_start]
| help: must be of the form: `#[rustc_layout_scalar_valid_range_start(start)]`
error[E0539]: malformed `rustc_layout_scalar_valid_range_end` attribute input
--> $DIR/malformed-attrs.rs:130:1
--> $DIR/malformed-attrs.rs:131:1
|
LL | #[rustc_layout_scalar_valid_range_end]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -505,7 +505,7 @@ LL | #[rustc_layout_scalar_valid_range_end]
| help: must be of the form: `#[rustc_layout_scalar_valid_range_end(end)]`
error[E0565]: malformed `marker` attribute input
--> $DIR/malformed-attrs.rs:155:1
--> $DIR/malformed-attrs.rs:156:1
|
LL | #[marker = 3]
| ^^^^^^^^^---^
@@ -514,7 +514,7 @@ LL | #[marker = 3]
| help: must be of the form: `#[marker]`
error[E0565]: malformed `fundamental` attribute input
--> $DIR/malformed-attrs.rs:157:1
--> $DIR/malformed-attrs.rs:158:1
|
LL | #[fundamental()]
| ^^^^^^^^^^^^^--^
@@ -523,7 +523,7 @@ LL | #[fundamental()]
| help: must be of the form: `#[fundamental]`
error[E0565]: malformed `ffi_pure` attribute input
--> $DIR/malformed-attrs.rs:165:5
--> $DIR/malformed-attrs.rs:166:5
|
LL | #[unsafe(ffi_pure = 1)]
| ^^^^^^^^^^^^^^^^^^---^^
@@ -532,7 +532,7 @@ LL | #[unsafe(ffi_pure = 1)]
| help: must be of the form: `#[ffi_pure]`
error[E0539]: malformed `link_ordinal` attribute input
--> $DIR/malformed-attrs.rs:167:5
--> $DIR/malformed-attrs.rs:168:5
|
LL | #[link_ordinal]
| ^^^^^^^^^^^^^^^
@@ -541,7 +541,7 @@ LL | #[link_ordinal]
| help: must be of the form: `#[link_ordinal(ordinal)]`
error[E0565]: malformed `ffi_const` attribute input
--> $DIR/malformed-attrs.rs:171:5
--> $DIR/malformed-attrs.rs:172:5
|
LL | #[unsafe(ffi_const = 1)]
| ^^^^^^^^^^^^^^^^^^^---^^
@@ -550,7 +550,7 @@ LL | #[unsafe(ffi_const = 1)]
| help: must be of the form: `#[ffi_const]`
error[E0565]: malformed `automatically_derived` attribute input
--> $DIR/malformed-attrs.rs:191:1
--> $DIR/malformed-attrs.rs:192:1
|
LL | #[automatically_derived = 18]
| ^^^^^^^^^^^^^^^^^^^^^^^^----^
@@ -559,7 +559,7 @@ LL | #[automatically_derived = 18]
| help: must be of the form: `#[automatically_derived]`
error[E0565]: malformed `non_exhaustive` attribute input
--> $DIR/malformed-attrs.rs:197:1
--> $DIR/malformed-attrs.rs:198:1
|
LL | #[non_exhaustive = 1]
| ^^^^^^^^^^^^^^^^^---^
@@ -568,7 +568,7 @@ LL | #[non_exhaustive = 1]
| help: must be of the form: `#[non_exhaustive]`
error[E0565]: malformed `type_const` attribute input
--> $DIR/malformed-attrs.rs:143:5
--> $DIR/malformed-attrs.rs:144:5
|
LL | #[type_const = 1]
| ^^^^^^^^^^^^^---^
@@ -577,7 +577,7 @@ LL | #[type_const = 1]
| help: must be of the form: `#[type_const]`
error: attribute should be applied to `const fn`
--> $DIR/malformed-attrs.rs:34:1
--> $DIR/malformed-attrs.rs:35:1
|
LL | #[rustc_allow_const_fn_unstable]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -589,19 +589,19 @@ LL | | }
| |_- not a `const fn`
error: `#[repr(align(...))]` is not supported on function items
--> $DIR/malformed-attrs.rs:48:1
--> $DIR/malformed-attrs.rs:49:1
|
LL | #[repr]
| ^^^^^^^
|
help: use `#[align(...)]` instead
--> $DIR/malformed-attrs.rs:48:1
help: use `#[rustc_align(...)]` instead
--> $DIR/malformed-attrs.rs:49:1
|
LL | #[repr]
| ^^^^^^^
warning: `#[diagnostic::do_not_recommend]` does not expect any arguments
--> $DIR/malformed-attrs.rs:149:1
--> $DIR/malformed-attrs.rs:150:1
|
LL | #[diagnostic::do_not_recommend()]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -609,7 +609,7 @@ LL | #[diagnostic::do_not_recommend()]
= note: `#[warn(malformed_diagnostic_attributes)]` on by default
warning: missing options for `on_unimplemented` attribute
--> $DIR/malformed-attrs.rs:138:1
--> $DIR/malformed-attrs.rs:139:1
|
LL | #[diagnostic::on_unimplemented]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -617,7 +617,7 @@ LL | #[diagnostic::on_unimplemented]
= help: at least one of the `message`, `note` and `label` options are expected
warning: malformed `on_unimplemented` attribute
--> $DIR/malformed-attrs.rs:140:1
--> $DIR/malformed-attrs.rs:141:1
|
LL | #[diagnostic::on_unimplemented = 1]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
@@ -625,7 +625,7 @@ LL | #[diagnostic::on_unimplemented = 1]
= help: only `message`, `note` and `label` are allowed as options
error: valid forms for the attribute are `#[inline(always|never)]` and `#[inline]`
--> $DIR/malformed-attrs.rs:53:1
--> $DIR/malformed-attrs.rs:54:1
|
LL | #[inline = 5]
| ^^^^^^^^^^^^^
@@ -634,7 +634,7 @@ LL | #[inline = 5]
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error: valid forms for the attribute are `#[ignore = "reason"]` and `#[ignore]`
--> $DIR/malformed-attrs.rs:94:1
--> $DIR/malformed-attrs.rs:95:1
|
LL | #[ignore()]
| ^^^^^^^^^^^
@@ -643,7 +643,7 @@ LL | #[ignore()]
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error: valid forms for the attribute are `#[ignore = "reason"]` and `#[ignore]`
--> $DIR/malformed-attrs.rs:223:1
--> $DIR/malformed-attrs.rs:224:1
|
LL | #[ignore = 1]
| ^^^^^^^^^^^^^
@@ -652,7 +652,7 @@ LL | #[ignore = 1]
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error[E0308]: mismatched types
--> $DIR/malformed-attrs.rs:111:23
--> $DIR/malformed-attrs.rs:112:23
|
LL | fn test() {
| - help: a return type might be missing here: `-> _`
@@ -660,7 +660,7 @@ LL | #[coroutine = 63] || {}
| ^^^^^ expected `()`, found coroutine
|
= note: expected unit type `()`
found coroutine `{coroutine@$DIR/malformed-attrs.rs:111:23: 111:25}`
found coroutine `{coroutine@$DIR/malformed-attrs.rs:112:23: 112:25}`
error: aborting due to 75 previous errors; 3 warnings emitted

View File

@@ -1,49 +1,54 @@
// ignore-tidy-linelength
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#![feature(rustc_attrs)]
#![feature(fn_align)]
#![crate_type = "lib"]
trait MyTrait {
#[align] //~ ERROR malformed `align` attribute input
#[rustc_align] //~ ERROR malformed `rustc_align` attribute input
fn myfun1();
#[align(1, 2)] //~ ERROR malformed `align` attribute input
#[rustc_align(1, 2)] //~ ERROR malformed `rustc_align` attribute input
fn myfun2();
}
#[align = 16] //~ ERROR malformed `align` attribute input
#[rustc_align = 16] //~ ERROR malformed `rustc_align` attribute input
fn f1() {}
#[align("hello")] //~ ERROR invalid alignment value: not an unsuffixed integer
#[rustc_align("hello")] //~ ERROR invalid alignment value: not an unsuffixed integer
fn f2() {}
#[align(0)] //~ ERROR invalid alignment value: not a power of two
#[rustc_align(0)] //~ ERROR invalid alignment value: not a power of two
fn f3() {}
#[repr(align(16))] //~ ERROR `#[repr(align(...))]` is not supported on function items
fn f4() {}
#[align(-1)] //~ ERROR expected unsuffixed literal, found `-`
#[rustc_align(-1)] //~ ERROR expected unsuffixed literal, found `-`
fn f5() {}
#[align(3)] //~ ERROR invalid alignment value: not a power of two
#[rustc_align(3)] //~ ERROR invalid alignment value: not a power of two
fn f6() {}
#[align(4usize)] //~ ERROR invalid alignment value: not an unsuffixed integer [E0589]
#[rustc_align(4usize)] //~ ERROR invalid alignment value: not an unsuffixed integer [E0589]
//~^ ERROR suffixed literals are not allowed in attributes
fn f7() {}
#[align(16)]
#[align(3)] //~ ERROR invalid alignment value: not a power of two
#[align(16)]
#[rustc_align(16)]
#[rustc_align(3)] //~ ERROR invalid alignment value: not a power of two
#[rustc_align(16)]
fn f8() {}
#[align(16)] //~ ERROR `#[align(...)]` is not supported on struct items
#[rustc_align(16)] //~ ERROR `#[rustc_align(...)]` is not supported on struct items
struct S1;
#[align(32)] //~ ERROR `#[align(...)]` should be applied to a function item
#[rustc_align(32)] //~ ERROR `#[rustc_align(...)]` should be applied to a function item
const FOO: i32 = 42;
#[align(32)] //~ ERROR `#[align(...)]` should be applied to a function item
#[rustc_align(32)] //~ ERROR `#[rustc_align(...)]` should be applied to a function item
mod test {}
#[align(32)] //~ ERROR `#[align(...)]` should be applied to a function item
#[rustc_align(32)] //~ ERROR `#[rustc_align(...)]` should be applied to a function item
use ::std::iter;

View File

@@ -1,119 +1,119 @@
error: expected unsuffixed literal, found `-`
--> $DIR/malformed-fn-align.rs:24:9
--> $DIR/malformed-fn-align.rs:29:15
|
LL | #[align(-1)]
| ^
LL | #[rustc_align(-1)]
| ^
error: suffixed literals are not allowed in attributes
--> $DIR/malformed-fn-align.rs:30:9
--> $DIR/malformed-fn-align.rs:35:15
|
LL | #[align(4usize)]
| ^^^^^^
LL | #[rustc_align(4usize)]
| ^^^^^^
|
= help: instead of using a suffixed literal (`1u8`, `1.0f32`, etc.), use an unsuffixed version (`1`, `1.0`, etc.)
error[E0539]: malformed `align` attribute input
--> $DIR/malformed-fn-align.rs:5:5
error[E0539]: malformed `rustc_align` attribute input
--> $DIR/malformed-fn-align.rs:10:5
|
LL | #[align]
| ^^^^^^^^
LL | #[rustc_align]
| ^^^^^^^^^^^^^^
| |
| expected this to be a list
| help: must be of the form: `#[align(<alignment in bytes>)]`
| help: must be of the form: `#[rustc_align(<alignment in bytes>)]`
error[E0805]: malformed `align` attribute input
--> $DIR/malformed-fn-align.rs:8:5
error[E0805]: malformed `rustc_align` attribute input
--> $DIR/malformed-fn-align.rs:13:5
|
LL | #[align(1, 2)]
| ^^^^^^^------^
| | |
| | expected a single argument here
| help: must be of the form: `#[align(<alignment in bytes>)]`
LL | #[rustc_align(1, 2)]
| ^^^^^^^^^^^^^------^
| | |
| | expected a single argument here
| help: must be of the form: `#[rustc_align(<alignment in bytes>)]`
error[E0539]: malformed `align` attribute input
--> $DIR/malformed-fn-align.rs:12:1
error[E0539]: malformed `rustc_align` attribute input
--> $DIR/malformed-fn-align.rs:17:1
|
LL | #[align = 16]
| ^^^^^^^^^^^^^
LL | #[rustc_align = 16]
| ^^^^^^^^^^^^^^^^^^^
| |
| expected this to be a list
| help: must be of the form: `#[align(<alignment in bytes>)]`
| help: must be of the form: `#[rustc_align(<alignment in bytes>)]`
error[E0589]: invalid alignment value: not an unsuffixed integer
--> $DIR/malformed-fn-align.rs:15:9
--> $DIR/malformed-fn-align.rs:20:15
|
LL | #[align("hello")]
| ^^^^^^^
LL | #[rustc_align("hello")]
| ^^^^^^^
error[E0589]: invalid alignment value: not a power of two
--> $DIR/malformed-fn-align.rs:18:9
--> $DIR/malformed-fn-align.rs:23:15
|
LL | #[align(0)]
| ^
LL | #[rustc_align(0)]
| ^
error[E0589]: invalid alignment value: not a power of two
--> $DIR/malformed-fn-align.rs:27:9
--> $DIR/malformed-fn-align.rs:32:15
|
LL | #[align(3)]
| ^
LL | #[rustc_align(3)]
| ^
error[E0589]: invalid alignment value: not an unsuffixed integer
--> $DIR/malformed-fn-align.rs:30:9
--> $DIR/malformed-fn-align.rs:35:15
|
LL | #[align(4usize)]
| ^^^^^^
LL | #[rustc_align(4usize)]
| ^^^^^^
error[E0589]: invalid alignment value: not a power of two
--> $DIR/malformed-fn-align.rs:35:9
--> $DIR/malformed-fn-align.rs:40:15
|
LL | #[align(3)]
| ^
LL | #[rustc_align(3)]
| ^
error: `#[repr(align(...))]` is not supported on function items
--> $DIR/malformed-fn-align.rs:21:8
--> $DIR/malformed-fn-align.rs:26:8
|
LL | #[repr(align(16))]
| ^^^^^^^^^
|
help: use `#[align(...)]` instead
--> $DIR/malformed-fn-align.rs:21:8
help: use `#[rustc_align(...)]` instead
--> $DIR/malformed-fn-align.rs:26:8
|
LL | #[repr(align(16))]
| ^^^^^^^^^
error: `#[align(...)]` is not supported on struct items
--> $DIR/malformed-fn-align.rs:39:1
error: `#[rustc_align(...)]` is not supported on struct items
--> $DIR/malformed-fn-align.rs:44:1
|
LL | #[align(16)]
| ^^^^^^^^^^^^
LL | #[rustc_align(16)]
| ^^^^^^^^^^^^^^^^^^
|
help: use `#[repr(align(...))]` instead
|
LL - #[align(16)]
LL - #[rustc_align(16)]
LL + #[repr(align(16))]
|
error: `#[align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:42:1
error: `#[rustc_align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:47:1
|
LL | #[align(32)]
| ^^^^^^^^^^^^
LL | #[rustc_align(32)]
| ^^^^^^^^^^^^^^^^^^
LL | const FOO: i32 = 42;
| -------------------- not a function item
error: `#[align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:45:1
error: `#[rustc_align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:50:1
|
LL | #[align(32)]
| ^^^^^^^^^^^^
LL | #[rustc_align(32)]
| ^^^^^^^^^^^^^^^^^^
LL | mod test {}
| ----------- not a function item
error: `#[align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:48:1
error: `#[rustc_align(...)]` should be applied to a function item
--> $DIR/malformed-fn-align.rs:53:1
|
LL | #[align(32)]
| ^^^^^^^^^^^^
LL | #[rustc_align(32)]
| ^^^^^^^^^^^^^^^^^^
LL | use ::std::iter;
| ---------------- not a function item

View File

@@ -1,12 +1,16 @@
#![crate_type = "lib"]
#[align(16)]
//~^ ERROR the `#[align]` attribute is an experimental feature
// ignore-tidy-linelength
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
#[rustc_align(16)]
//~^ ERROR the `#[rustc_align]` attribute is an experimental feature
fn requires_alignment() {}
trait MyTrait {
#[align]
//~^ ERROR the `#[align]` attribute is an experimental feature
//~| ERROR malformed `align` attribute input
#[rustc_align]
//~^ ERROR the `#[rustc_align]` attribute is an experimental feature
//~| ERROR malformed `rustc_align` attribute input
fn myfun();
}

View File

@@ -1,31 +1,31 @@
error[E0658]: the `#[align]` attribute is an experimental feature
--> $DIR/feature-gate-fn_align.rs:3:1
error[E0658]: the `#[rustc_align]` attribute is an experimental feature
--> $DIR/feature-gate-fn_align.rs:7:1
|
LL | #[align(16)]
| ^^^^^^^^^^^^
LL | #[rustc_align(16)]
| ^^^^^^^^^^^^^^^^^^
|
= note: see issue #82232 <https://github.com/rust-lang/rust/issues/82232> for more information
= help: add `#![feature(fn_align)]` 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 `#[align]` attribute is an experimental feature
--> $DIR/feature-gate-fn_align.rs:8:5
error[E0658]: the `#[rustc_align]` attribute is an experimental feature
--> $DIR/feature-gate-fn_align.rs:12:5
|
LL | #[align]
| ^^^^^^^^
LL | #[rustc_align]
| ^^^^^^^^^^^^^^
|
= note: see issue #82232 <https://github.com/rust-lang/rust/issues/82232> for more information
= help: add `#![feature(fn_align)]` 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[E0539]: malformed `align` attribute input
--> $DIR/feature-gate-fn_align.rs:8:5
error[E0539]: malformed `rustc_align` attribute input
--> $DIR/feature-gate-fn_align.rs:12:5
|
LL | #[align]
| ^^^^^^^^
LL | #[rustc_align]
| ^^^^^^^^^^^^^^
| |
| expected this to be a list
| help: must be of the form: `#[align(<alignment in bytes>)]`
| help: must be of the form: `#[rustc_align(<alignment in bytes>)]`
error: aborting due to 3 previous errors