From 2cedd86b1c25db321e7e023f6a429e23425a7e00 Mon Sep 17 00:00:00 2001 From: Fabian Wolff Date: Thu, 17 Jun 2021 16:45:26 +0200 Subject: [PATCH] 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 eca84c791fb3..e85392cf0bda 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 000000000000..378f685ed30a --- /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 000000000000..da7e480c63e3 --- /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 +