]> git.lizzy.rs Git - rust.git/commitdiff
Fix ICE when using `#[doc(keyword = "...")]` on non-items
authorFabian Wolff <fabian.wolff@alumni.ethz.ch>
Thu, 17 Jun 2021 14:45:26 +0000 (16:45 +0200)
committerFabian Wolff <fabian.wolff@alumni.ethz.ch>
Thu, 17 Jun 2021 14:45:26 +0000 (16:45 +0200)
compiler/rustc_passes/src/check_attr.rs
src/test/ui/rustdoc/issue-83512.rs [new file with mode: 0644]
src/test/ui/rustdoc/issue-83512.stderr [new file with mode: 0644]

index eca84c791fb3f15142aa717ccdf72bd1534a98dc..e85392cf0bda5b2bf615515821343d54db32f334 100644 (file)
@@ -525,8 +525,11 @@ fn check_doc_keyword(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool {
             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 (file)
index 0000000..378f685
--- /dev/null
@@ -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 (file)
index 0000000..da7e480
--- /dev/null
@@ -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
+