diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-11-15 10:44:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-15 10:44:09 +0100 |
| commit | 47f9d89f9abd24bc6a347a77dcf131e283ad2c3b (patch) | |
| tree | 34c81cba566dc4e07e7ec021102bfee79ea07dbc | |
| parent | e309b79050c4dd47c08b3ef2b8228701883c5c24 (diff) | |
| parent | 5ef85bbd7cd02df6389db6b3160ec7ef153091f1 (diff) | |
| download | rust-47f9d89f9abd24bc6a347a77dcf131e283ad2c3b.tar.gz rust-47f9d89f9abd24bc6a347a77dcf131e283ad2c3b.zip | |
Rollup merge of #104148 - fmease:fix-104140, r=petrochenkov
Visit attributes of trait impl items during AST validation Fixes #104140. This fix might not be backward compatible (in practice) since we now validate more attributes than before. Should I write more tests? `@rustbot` label A-attributes
| -rw-r--r-- | compiler/rustc_ast_passes/src/ast_validation.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/on-unimplemented/issue-104140.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/on-unimplemented/issue-104140.stderr | 15 |
3 files changed, 25 insertions, 1 deletions
diff --git a/compiler/rustc_ast_passes/src/ast_validation.rs b/compiler/rustc_ast_passes/src/ast_validation.rs index 03664324404..712fb5ac71f 100644 --- a/compiler/rustc_ast_passes/src/ast_validation.rs +++ b/compiler/rustc_ast_passes/src/ast_validation.rs @@ -1051,6 +1051,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> { walk_list!(this, visit_assoc_item, items, AssocCtxt::Impl); }); + walk_list!(self, visit_attribute, &item.attrs); return; // Avoid visiting again. } ItemKind::Impl(box Impl { @@ -1168,7 +1169,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> { }); walk_list!(self, visit_assoc_item, items, AssocCtxt::Trait); walk_list!(self, visit_attribute, &item.attrs); - return; + return; // Avoid visiting again } ItemKind::Mod(unsafety, ref mod_kind) => { if let Unsafe::Yes(span) = unsafety { diff --git a/src/test/ui/on-unimplemented/issue-104140.rs b/src/test/ui/on-unimplemented/issue-104140.rs new file mode 100644 index 00000000000..ade3f727004 --- /dev/null +++ b/src/test/ui/on-unimplemented/issue-104140.rs @@ -0,0 +1,8 @@ +#![feature(rustc_attrs)] + +trait Foo {} + +#[rustc_on_unimplemented] //~ ERROR malformed `rustc_on_unimplemented` attribute input +impl Foo for u32 {} + +fn main() {} diff --git a/src/test/ui/on-unimplemented/issue-104140.stderr b/src/test/ui/on-unimplemented/issue-104140.stderr new file mode 100644 index 00000000000..ddb1f50f0bb --- /dev/null +++ b/src/test/ui/on-unimplemented/issue-104140.stderr @@ -0,0 +1,15 @@ +error: malformed `rustc_on_unimplemented` attribute input + --> $DIR/issue-104140.rs:5:1 + | +LL | #[rustc_on_unimplemented] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: the following are the possible correct uses + | +LL | #[rustc_on_unimplemented = "message"] + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +LL | #[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...")] + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +error: aborting due to previous error + |
