From 7402eb001b7a49151b704d129be19ed325d2be72 Mon Sep 17 00:00:00 2001 From: EliseZeroTwo Date: Mon, 25 Oct 2021 17:31:27 +0200 Subject: [PATCH 1/2] fix: inner attribute followed by outer attribute causing ICE --- compiler/rustc_ast/src/tokenstream.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/compiler/rustc_ast/src/tokenstream.rs b/compiler/rustc_ast/src/tokenstream.rs index 5d994dbad4d1f..51cabb50cd3de 100644 --- a/compiler/rustc_ast/src/tokenstream.rs +++ b/compiler/rustc_ast/src/tokenstream.rs @@ -221,12 +221,6 @@ impl AttrAnnotatedTokenStream { for attr in &data.attrs { match attr.style { crate::AttrStyle::Outer => { - assert!( - inner_attrs.len() == 0, - "Found outer attribute {:?} after inner attrs {:?}", - attr, - inner_attrs - ); outer_attrs.push(attr); } crate::AttrStyle::Inner => { From 7f0d43a003a70ce4cc12d8239e379feb5e5e48f8 Mon Sep 17 00:00:00 2001 From: EliseZeroTwo Date: Tue, 26 Oct 2021 11:45:15 +0200 Subject: [PATCH 2/2] test: add test for inner attribute followed by outer attribute causing ICE --- ...9971-outer-attr-following-inner-attr-ice.rs | 13 +++++++++++++ ...9971-outer-attr-following-inner-attr-ice.rs | 15 +++++++++++++++ ...-outer-attr-following-inner-attr-ice.stderr | 18 ++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/test/ui/parser/auxiliary/issue-89971-outer-attr-following-inner-attr-ice.rs create mode 100644 src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.rs create mode 100644 src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.stderr diff --git a/src/test/ui/parser/auxiliary/issue-89971-outer-attr-following-inner-attr-ice.rs b/src/test/ui/parser/auxiliary/issue-89971-outer-attr-following-inner-attr-ice.rs new file mode 100644 index 0000000000000..e5604b816b5e9 --- /dev/null +++ b/src/test/ui/parser/auxiliary/issue-89971-outer-attr-following-inner-attr-ice.rs @@ -0,0 +1,13 @@ +// force-host +// no-prefer-dynamic + +#![crate_type = "proc-macro"] + +extern crate proc_macro; + +use proc_macro::TokenStream; + +#[proc_macro_derive(ICE)] +pub fn derive(_: TokenStream) -> TokenStream { + r#"#[allow(missing_docs)] struct X { }"#.parse().unwrap() +} diff --git a/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.rs b/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.rs new file mode 100644 index 0000000000000..fe67d9822fc9c --- /dev/null +++ b/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.rs @@ -0,0 +1,15 @@ +// aux-build:issue-89971-outer-attr-following-inner-attr-ice.rs + +#[macro_use] +extern crate issue_89971_outer_attr_following_inner_attr_ice; + +fn main() { + Mew(); + X {}; +} + +#![deny(missing_docs)] +//~^ ERROR an inner attribute is not permitted in this context +#[derive(ICE)] +#[deny(missing_docs)] +struct Mew(); diff --git a/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.stderr b/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.stderr new file mode 100644 index 0000000000000..34a6ab00d7b2d --- /dev/null +++ b/src/test/ui/parser/issue-89971-outer-attr-following-inner-attr-ice.stderr @@ -0,0 +1,18 @@ +error: an inner attribute is not permitted in this context + --> $DIR/issue-89971-outer-attr-following-inner-attr-ice.rs:11:1 + | +LL | #![deny(missing_docs)] + | ^^^^^^^^^^^^^^^^^^^^^^ +... +LL | struct Mew(); + | ------------- the inner attribute doesn't annotate this struct + | + = note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files +help: to annotate the struct, change the attribute from inner to outer style + | +LL - #![deny(missing_docs)] +LL + #[deny(missing_docs)] + | + +error: aborting due to previous error +