From 2cedd86b1c25db321e7e023f6a429e23425a7e00 Mon Sep 17 00:00:00 2001 From: Fabian Wolff Date: Thu, 17 Jun 2021 16:45:26 +0200 Subject: [PATCH 1/2] Fix ICE when using `#[doc(keyword = "...")]` on non-items --- compiler/rustc_passes/src/check_attr.rs | 7 +++++-- src/test/ui/rustdoc/issue-83512.rs | 10 ++++++++++ src/test/ui/rustdoc/issue-83512.stderr | 8 ++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/rustdoc/issue-83512.rs create mode 100644 src/test/ui/rustdoc/issue-83512.stderr diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index eca84c791fb3f..e85392cf0bda5 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -525,8 +525,11 @@ impl CheckAttrVisitor<'tcx> { self.doc_attr_str_error(meta, "keyword"); return false; } - match self.tcx.hir().expect_item(hir_id).kind { - ItemKind::Mod(ref module) => { + match self.tcx.hir().find(hir_id).and_then(|node| match node { + hir::Node::Item(item) => Some(&item.kind), + _ => None, + }) { + Some(ItemKind::Mod(ref module)) => { if !module.item_ids.is_empty() { self.tcx .sess diff --git a/src/test/ui/rustdoc/issue-83512.rs b/src/test/ui/rustdoc/issue-83512.rs new file mode 100644 index 0000000000000..378f685ed30aa --- /dev/null +++ b/src/test/ui/rustdoc/issue-83512.rs @@ -0,0 +1,10 @@ +// Regression test for the ICE described in #83512. + +#![feature(doc_keyword)] +#![crate_type="lib"] + +trait Foo { + #[doc(keyword = "match")] + //~^ ERROR: `#[doc(keyword = "...")]` can only be used on modules + fn quux() {} +} diff --git a/src/test/ui/rustdoc/issue-83512.stderr b/src/test/ui/rustdoc/issue-83512.stderr new file mode 100644 index 0000000000000..da7e480c63e37 --- /dev/null +++ b/src/test/ui/rustdoc/issue-83512.stderr @@ -0,0 +1,8 @@ +error: `#[doc(keyword = "...")]` can only be used on modules + --> $DIR/issue-83512.rs:7:11 + | +LL | #[doc(keyword = "match")] + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + From e9e844f44cf21bfa9ff8931b9256da57a2dec79f Mon Sep 17 00:00:00 2001 From: Fabian Wolff Date: Thu, 17 Jun 2021 17:28:55 +0200 Subject: [PATCH 2/2] Move regression test for #83512 into doc_keyword.rs --- src/test/ui/rustdoc/doc_keyword.rs | 8 ++++++++ src/test/ui/rustdoc/doc_keyword.stderr | 8 +++++++- src/test/ui/rustdoc/issue-83512.rs | 10 ---------- src/test/ui/rustdoc/issue-83512.stderr | 8 -------- 4 files changed, 15 insertions(+), 19 deletions(-) delete mode 100644 src/test/ui/rustdoc/issue-83512.rs delete mode 100644 src/test/ui/rustdoc/issue-83512.stderr diff --git a/src/test/ui/rustdoc/doc_keyword.rs b/src/test/ui/rustdoc/doc_keyword.rs index 4c72e7e96842c..4518f77ef933d 100644 --- a/src/test/ui/rustdoc/doc_keyword.rs +++ b/src/test/ui/rustdoc/doc_keyword.rs @@ -10,3 +10,11 @@ mod foo { #[doc(keyword = "hall")] //~ ERROR fn foo() {} + + +// Regression test for the ICE described in #83512. +trait Foo { + #[doc(keyword = "match")] + //~^ ERROR: `#[doc(keyword = "...")]` can only be used on modules + fn quux() {} +} diff --git a/src/test/ui/rustdoc/doc_keyword.stderr b/src/test/ui/rustdoc/doc_keyword.stderr index 0679bb8c5a7a6..6ba7034d54122 100644 --- a/src/test/ui/rustdoc/doc_keyword.stderr +++ b/src/test/ui/rustdoc/doc_keyword.stderr @@ -10,11 +10,17 @@ error: `#[doc(keyword = "...")]` can only be used on modules LL | #[doc(keyword = "hall")] | ^^^^^^^^^^^^^^^^ +error: `#[doc(keyword = "...")]` can only be used on modules + --> $DIR/doc_keyword.rs:17:11 + | +LL | #[doc(keyword = "match")] + | ^^^^^^^^^^^^^^^^^ + error: `#![doc(keyword = "...")]` isn't allowed as a crate-level attribute --> $DIR/doc_keyword.rs:4:8 | LL | #![doc(keyword = "hello")] | ^^^^^^^^^^^^^^^^^ -error: aborting due to 3 previous errors +error: aborting due to 4 previous errors diff --git a/src/test/ui/rustdoc/issue-83512.rs b/src/test/ui/rustdoc/issue-83512.rs deleted file mode 100644 index 378f685ed30aa..0000000000000 --- a/src/test/ui/rustdoc/issue-83512.rs +++ /dev/null @@ -1,10 +0,0 @@ -// Regression test for the ICE described in #83512. - -#![feature(doc_keyword)] -#![crate_type="lib"] - -trait Foo { - #[doc(keyword = "match")] - //~^ ERROR: `#[doc(keyword = "...")]` can only be used on modules - fn quux() {} -} diff --git a/src/test/ui/rustdoc/issue-83512.stderr b/src/test/ui/rustdoc/issue-83512.stderr deleted file mode 100644 index da7e480c63e37..0000000000000 --- a/src/test/ui/rustdoc/issue-83512.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: `#[doc(keyword = "...")]` can only be used on modules - --> $DIR/issue-83512.rs:7:11 - | -LL | #[doc(keyword = "match")] - | ^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error -