about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2020-02-23 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2020-02-23 00:00:00 +0000
commitd78b22f35ec367368643fe7d6f7e87d01762692b (patch)
tree59a8cdcc3e1ed5941bd20e671b54cda9cbfb593c
parentb1f395de642e8be7bcbbd2bd8aaadab715851f49 (diff)
downloadrust-d78b22f35ec367368643fe7d6f7e87d01762692b.tar.gz
rust-d78b22f35ec367368643fe7d6f7e87d01762692b.zip
Mark attributes consumed by `check_mod_attrs` as normal
Take advantage of the fact that `check_mod_attrs` marks attributes as
used and change their type to normal, so that any remaining uses will be
warned about by the unused attribute lint.
-rw-r--r--src/librustc_feature/builtin_attrs.rs12
-rw-r--r--src/test/ui/unused/unused-attr-crate.rs13
-rw-r--r--src/test/ui/unused/unused-attr-crate.stderr44
3 files changed, 63 insertions, 6 deletions
diff --git a/src/librustc_feature/builtin_attrs.rs b/src/librustc_feature/builtin_attrs.rs
index e2e061c185c..91658db1a7a 100644
--- a/src/librustc_feature/builtin_attrs.rs
+++ b/src/librustc_feature/builtin_attrs.rs
@@ -234,7 +234,7 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
     ungated!(export_name, Whitelisted, template!(NameValueStr: "name")),
     ungated!(link_section, Whitelisted, template!(NameValueStr: "name")),
     ungated!(no_mangle, Whitelisted, template!(Word)),
-    ungated!(used, Whitelisted, template!(Word)),
+    ungated!(used, Normal, template!(Word)),
 
     // Limits:
     ungated!(recursion_limit, CrateLevel, template!(NameValueStr: "N")),
@@ -250,17 +250,17 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
     ungated!(path, Normal, template!(NameValueStr: "file")),
     ungated!(no_std, CrateLevel, template!(Word)),
     ungated!(no_implicit_prelude, Normal, template!(Word)),
-    ungated!(non_exhaustive, Whitelisted, template!(Word)),
+    ungated!(non_exhaustive, Normal, template!(Word)),
 
     // Runtime
     ungated!(windows_subsystem, Whitelisted, template!(NameValueStr: "windows|console")),
     ungated!(panic_handler, Normal, template!(Word)), // RFC 2070
 
     // Code generation:
-    ungated!(inline, Whitelisted, template!(Word, List: "always|never")),
+    ungated!(inline, Normal, template!(Word, List: "always|never")),
     ungated!(cold, Whitelisted, template!(Word)),
     ungated!(no_builtins, Whitelisted, template!(Word)),
-    ungated!(target_feature, Whitelisted, template!(List: r#"enable = "name""#)),
+    ungated!(target_feature, Normal, template!(List: r#"enable = "name""#)),
     gated!(
         no_sanitize, Whitelisted,
         template!(List: "address, memory, thread"),
@@ -275,7 +275,7 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
     // ==========================================================================
 
     // Linking:
-    gated!(naked, Whitelisted, template!(Word), naked_functions, experimental!(naked)),
+    gated!(naked, Normal, template!(Word), naked_functions, experimental!(naked)),
     gated!(
         link_args, Normal, template!(NameValueStr: "args"),
         "the `link_args` attribute is experimental and not portable across platforms, \
@@ -332,7 +332,7 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
     ),
 
     gated!(ffi_returns_twice, Whitelisted, template!(Word), experimental!(ffi_returns_twice)),
-    gated!(track_caller, Whitelisted, template!(Word), experimental!(track_caller)),
+    gated!(track_caller, Normal, template!(Word), experimental!(track_caller)),
     gated!(
         register_attr, CrateLevel, template!(List: "attr1, attr2, ..."),
         experimental!(register_attr),
diff --git a/src/test/ui/unused/unused-attr-crate.rs b/src/test/ui/unused/unused-attr-crate.rs
new file mode 100644
index 00000000000..adb939e9b40
--- /dev/null
+++ b/src/test/ui/unused/unused-attr-crate.rs
@@ -0,0 +1,13 @@
+#![deny(unused_attributes)]
+
+#![feature(naked_functions)]
+#![feature(track_caller)]
+
+#![used] //~ ERROR unused attribute
+#![non_exhaustive] //~ ERROR unused attribute
+#![inline] //~ ERROR unused attribute
+#![target_feature(enable = "")] //~ ERROR unused attribute
+#![naked] //~ ERROR unused attribute
+#![track_caller] //~ ERROR unused attribute
+
+fn main() {}
diff --git a/src/test/ui/unused/unused-attr-crate.stderr b/src/test/ui/unused/unused-attr-crate.stderr
new file mode 100644
index 00000000000..620a3ea5315
--- /dev/null
+++ b/src/test/ui/unused/unused-attr-crate.stderr
@@ -0,0 +1,44 @@
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:6:1
+   |
+LL | #![used]
+   | ^^^^^^^^
+   |
+note: the lint level is defined here
+  --> $DIR/unused-attr-crate.rs:1:9
+   |
+LL | #![deny(unused_attributes)]
+   |         ^^^^^^^^^^^^^^^^^
+
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:7:1
+   |
+LL | #![non_exhaustive]
+   | ^^^^^^^^^^^^^^^^^^
+
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:8:1
+   |
+LL | #![inline]
+   | ^^^^^^^^^^
+
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:9:1
+   |
+LL | #![target_feature(enable = "")]
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:10:1
+   |
+LL | #![naked]
+   | ^^^^^^^^^
+
+error: unused attribute
+  --> $DIR/unused-attr-crate.rs:11:1
+   |
+LL | #![track_caller]
+   | ^^^^^^^^^^^^^^^^
+
+error: aborting due to 6 previous errors
+