From b0b330f143ba0d6769b0d7da6d9302eef33fca44 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 1 Mar 2021 17:12:39 +0100 Subject: [PATCH 1/2] Validate meta items used in \#\[doc(...)\] --- compiler/rustc_passes/src/check_attr.rs | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index cf08881cd47..afd1642bbd5 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -544,6 +544,41 @@ impl CheckAttrVisitor<'tcx> { { return false; } + } else if let Some(i_meta) = meta.meta_item() { + if ![ + sym::cfg, + sym::hidden, + sym::html_favicon_url, + sym::html_logo_url, + sym::html_no_source, + sym::html_playground_url, + sym::html_root_url, + sym::include, + sym::inline, + sym::issue_tracker_base_url, + sym::masked, + sym::no_default_passes, // deprecated + sym::no_inline, + sym::passes, // deprecated + sym::primitive, + sym::spotlight, + sym::test, + ] + .iter() + .any(|m| i_meta.has_name(*m)) + { + self.tcx + .sess + .struct_span_err( + meta.span(), + &format!( + "unknown `doc` attribute `{}`", + i_meta.name_or_empty(), + ), + ) + .emit(); + return false; + } } } } From f6de1300b499c669a1a7865cb9860c27cebe5ac1 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 1 Mar 2021 17:13:06 +0100 Subject: [PATCH 2/2] Add tests for doc attribute check --- src/test/rustdoc-ui/doc-attr.rs | 5 +++++ src/test/rustdoc-ui/doc-attr.stderr | 14 ++++++++++++++ src/test/ui/attributes/doc-attr.rs | 5 +++++ src/test/ui/attributes/doc-attr.stderr | 14 ++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 src/test/rustdoc-ui/doc-attr.rs create mode 100644 src/test/rustdoc-ui/doc-attr.stderr create mode 100644 src/test/ui/attributes/doc-attr.rs create mode 100644 src/test/ui/attributes/doc-attr.stderr diff --git a/src/test/rustdoc-ui/doc-attr.rs b/src/test/rustdoc-ui/doc-attr.rs new file mode 100644 index 00000000000..37c69a214b8 --- /dev/null +++ b/src/test/rustdoc-ui/doc-attr.rs @@ -0,0 +1,5 @@ +#![crate_type = "lib"] +#![doc(as_ptr)] //~ ERROR + +#[doc(as_ptr)] //~ ERROR +pub fn foo() {} diff --git a/src/test/rustdoc-ui/doc-attr.stderr b/src/test/rustdoc-ui/doc-attr.stderr new file mode 100644 index 00000000000..17bc3d6a45a --- /dev/null +++ b/src/test/rustdoc-ui/doc-attr.stderr @@ -0,0 +1,14 @@ +error: unknown `doc` attribute `as_ptr` + --> $DIR/doc-attr.rs:4:7 + | +LL | #[doc(as_ptr)] + | ^^^^^^ + +error: unknown `doc` attribute `as_ptr` + --> $DIR/doc-attr.rs:2:8 + | +LL | #![doc(as_ptr)] + | ^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/attributes/doc-attr.rs b/src/test/ui/attributes/doc-attr.rs new file mode 100644 index 00000000000..37c69a214b8 --- /dev/null +++ b/src/test/ui/attributes/doc-attr.rs @@ -0,0 +1,5 @@ +#![crate_type = "lib"] +#![doc(as_ptr)] //~ ERROR + +#[doc(as_ptr)] //~ ERROR +pub fn foo() {} diff --git a/src/test/ui/attributes/doc-attr.stderr b/src/test/ui/attributes/doc-attr.stderr new file mode 100644 index 00000000000..17bc3d6a45a --- /dev/null +++ b/src/test/ui/attributes/doc-attr.stderr @@ -0,0 +1,14 @@ +error: unknown `doc` attribute `as_ptr` + --> $DIR/doc-attr.rs:4:7 + | +LL | #[doc(as_ptr)] + | ^^^^^^ + +error: unknown `doc` attribute `as_ptr` + --> $DIR/doc-attr.rs:2:8 + | +LL | #![doc(as_ptr)] + | ^^^^^^ + +error: aborting due to 2 previous errors +