From 34f38bf76006b0dfdc2784d76e3e1775cee024a4 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 17 Jun 2021 09:45:19 +0900 Subject: Make `s` pre-interned --- compiler/rustc_builtin_macros/src/deriving/encodable.rs | 7 +------ compiler/rustc_span/src/symbol.rs | 1 + 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'compiler') diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index 01a57bea14e..c5f3a9d3379 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -124,12 +124,7 @@ pub fn expand_deriving_rustc_encodable( explicit_self: borrowed_explicit_self(), args: vec![( Ptr(Box::new(Literal(Path::new_local(typaram))), Borrowed(None, Mutability::Mut)), - // FIXME: we could use `sym::s` here, but making `s` a static - // symbol changes the symbol index ordering in a way that makes - // ui/lint/rfc-2457-non-ascii-idents/lint-confusable-idents.rs - // fail. The linting code should be fixed so that its output - // does not depend on the symbol index ordering. - Symbol::intern("s"), + sym::s, )], ret_ty: Literal(Path::new_( pathvec_std!(result::Result), diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs index a96d37c652d..862bde3f6a3 100644 --- a/compiler/rustc_span/src/symbol.rs +++ b/compiler/rustc_span/src/symbol.rs @@ -1062,6 +1062,7 @@ symbols! { rustdoc, rustfmt, rvalue_static_promotion, + s, sanitize, sanitizer_runtime, saturating_add, -- cgit 1.4.1-3-g733a5 From 2cedd86b1c25db321e7e023f6a429e23425a7e00 Mon Sep 17 00:00:00 2001 From: Fabian Wolff Date: Thu, 17 Jun 2021 16:45:26 +0200 Subject: 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 (limited to 'compiler') diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index eca84c791fb..e85392cf0bd 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 00000000000..378f685ed30 --- /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 00000000000..da7e480c63e --- /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 + -- cgit 1.4.1-3-g733a5