Rollup merge of #90267 - EliseZeroTwo:elisezerotwo/fix_invalid_attrs_ice, r=Aaron1011
fix: inner attribute followed by outer attribute causing ICE Fixes #87936, #88938, and #89971. This removes the assertion that validates that there are no outer attributes following inner attributes. Where the inner attribute is invalid you get an actual error.
This commit is contained in:
commit
17d1742028
4 changed files with 46 additions and 6 deletions
|
@ -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 => {
|
||||
|
|
|
@ -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()
|
||||
}
|
|
@ -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();
|
|
@ -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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue