about summary refs log tree commit diff
path: root/src/test/ui/polymorphization
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2020-07-16 17:52:23 +0100
committerDavid Wood <david@davidtw.co>2020-07-20 19:35:35 +0100
commitb1f8bd635696644f86bdb5ea69fb69ec50bc6d9b (patch)
treef4c081257834b91b3eb89613bf3507adcf22585f /src/test/ui/polymorphization
parent5ce29d3d6f8994a1d9db9b9f8aa076001f7b8d07 (diff)
downloadrust-b1f8bd635696644f86bdb5ea69fb69ec50bc6d9b.tar.gz
rust-b1f8bd635696644f86bdb5ea69fb69ec50bc6d9b.zip
mir: use attribute over `-Z polymorphize-errors`
This commit replaces the `-Z polymorphize-errors` debugging flag with a
`#[rustc_polymorphize_error]` attribute for use on functions.

Signed-off-by: David Wood <david@davidtw.co>
Diffstat (limited to 'src/test/ui/polymorphization')
-rw-r--r--src/test/ui/polymorphization/const_parameters/closures.rs17
-rw-r--r--src/test/ui/polymorphization/const_parameters/closures.stderr12
-rw-r--r--src/test/ui/polymorphization/const_parameters/functions.rs9
-rw-r--r--src/test/ui/polymorphization/const_parameters/functions.stderr6
-rw-r--r--src/test/ui/polymorphization/generators.rs9
-rw-r--r--src/test/ui/polymorphization/generators.stderr8
-rw-r--r--src/test/ui/polymorphization/lifetimes.rs8
-rw-r--r--src/test/ui/polymorphization/lifetimes.stderr4
-rw-r--r--src/test/ui/polymorphization/predicates.rs6
-rw-r--r--src/test/ui/polymorphization/predicates.stderr2
-rw-r--r--src/test/ui/polymorphization/too-many-generic-params.rs3
-rw-r--r--src/test/ui/polymorphization/type_parameters/closures.rs37
-rw-r--r--src/test/ui/polymorphization/type_parameters/closures.stderr24
-rw-r--r--src/test/ui/polymorphization/type_parameters/functions.rs25
-rw-r--r--src/test/ui/polymorphization/type_parameters/functions.stderr10
-rw-r--r--src/test/ui/polymorphization/unsized_cast.rs5
-rw-r--r--src/test/ui/polymorphization/unsized_cast.stderr2
17 files changed, 117 insertions, 70 deletions
diff --git a/src/test/ui/polymorphization/const_parameters/closures.rs b/src/test/ui/polymorphization/const_parameters/closures.rs
index da83cc1bee4..7bbcaebea01 100644
--- a/src/test/ui/polymorphization/const_parameters/closures.rs
+++ b/src/test/ui/polymorphization/const_parameters/closures.rs
@@ -1,33 +1,36 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
-#![feature(const_generics)]
+#![feature(const_generics, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
 // This test checks that the polymorphization analysis correctly detects unused const
 // parameters in closures.
 
 // Function doesn't have any generic parameters to be unused.
+#[rustc_polymorphize_error]
 pub fn no_parameters() {
     let _ = || {};
 }
 
 // Function has an unused generic parameter in parent and closure.
+#[rustc_polymorphize_error]
 pub fn unused<const T: usize>() -> usize {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     let add_one = |x: usize| x + 1;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     add_one(3)
 }
 
 // Function has an unused generic parameter in closure, but not in parent.
+#[rustc_polymorphize_error]
 pub fn used_parent<const T: usize>() -> usize {
     let x: usize = T;
     let add_one = |x: usize| x + 1;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     x + add_one(3)
 }
 
 // Function uses generic parameter in value of a binding in closure.
+#[rustc_polymorphize_error]
 pub fn used_binding<const T: usize>() -> usize {
     let x = || {
         let y: usize = T;
@@ -38,14 +41,16 @@ pub fn used_binding<const T: usize>() -> usize {
 }
 
 // Closure uses a value as an upvar, which used the generic parameter.
+#[rustc_polymorphize_error]
 pub fn unused_upvar<const T: usize>() -> usize {
     let x: usize = T;
     let y = || x;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     y()
 }
 
 // Closure uses generic parameter in substitutions to another function.
+#[rustc_polymorphize_error]
 pub fn used_substs<const T: usize>() -> usize {
     let x = || unused::<T>();
     x()
diff --git a/src/test/ui/polymorphization/const_parameters/closures.stderr b/src/test/ui/polymorphization/const_parameters/closures.stderr
index 73a071f346a..eb872eac74c 100644
--- a/src/test/ui/polymorphization/const_parameters/closures.stderr
+++ b/src/test/ui/polymorphization/const_parameters/closures.stderr
@@ -1,14 +1,14 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/closures.rs:3:12
+  --> $DIR/closures.rs:2:12
    |
-LL | #![feature(const_generics)]
+LL | #![feature(const_generics, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
    |
    = note: `#[warn(incomplete_features)]` on by default
    = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:17:19
+  --> $DIR/closures.rs:18:19
    |
 LL | pub fn unused<const T: usize>() -> usize {
    |                     - generic parameter `T` is unused
@@ -17,13 +17,13 @@ LL |     let add_one = |x: usize| x + 1;
    |                   ^^^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:15:8
+  --> $DIR/closures.rs:16:8
    |
 LL | pub fn unused<const T: usize>() -> usize {
    |        ^^^^^^       - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:25:19
+  --> $DIR/closures.rs:27:19
    |
 LL | pub fn used_parent<const T: usize>() -> usize {
    |                          - generic parameter `T` is unused
@@ -32,7 +32,7 @@ LL |     let add_one = |x: usize| x + 1;
    |                   ^^^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:43:13
+  --> $DIR/closures.rs:47:13
    |
 LL | pub fn unused_upvar<const T: usize>() -> usize {
    |                           - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/const_parameters/functions.rs b/src/test/ui/polymorphization/const_parameters/functions.rs
index 1c19f9480b4..77539b94e48 100644
--- a/src/test/ui/polymorphization/const_parameters/functions.rs
+++ b/src/test/ui/polymorphization/const_parameters/functions.rs
@@ -1,26 +1,29 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
-#![feature(const_generics)]
+#![feature(const_generics, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
 // This test checks that the polymorphization analysis correctly detects unused const
 // parameters in functions.
 
 // Function doesn't have any generic parameters to be unused.
+#[rustc_polymorphize_error]
 pub fn no_parameters() {}
 
 // Function has an unused generic parameter.
+#[rustc_polymorphize_error]
 pub fn unused<const T: usize>() {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
 }
 
 // Function uses generic parameter in value of a binding.
+#[rustc_polymorphize_error]
 pub fn used_binding<const T: usize>() -> usize {
     let x: usize = T;
     x
 }
 
 // Function uses generic parameter in substitutions to another function.
+#[rustc_polymorphize_error]
 pub fn used_substs<const T: usize>() {
     unused::<T>()
 }
diff --git a/src/test/ui/polymorphization/const_parameters/functions.stderr b/src/test/ui/polymorphization/const_parameters/functions.stderr
index a503ec51942..c99a9b788eb 100644
--- a/src/test/ui/polymorphization/const_parameters/functions.stderr
+++ b/src/test/ui/polymorphization/const_parameters/functions.stderr
@@ -1,14 +1,14 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/functions.rs:3:12
+  --> $DIR/functions.rs:2:12
    |
-LL | #![feature(const_generics)]
+LL | #![feature(const_generics, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
    |
    = note: `#[warn(incomplete_features)]` on by default
    = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:13:8
+  --> $DIR/functions.rs:14:8
    |
 LL | pub fn unused<const T: usize>() {
    |        ^^^^^^       - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/generators.rs b/src/test/ui/polymorphization/generators.rs
index dd7c3497de2..1acba7c8bf1 100644
--- a/src/test/ui/polymorphization/generators.rs
+++ b/src/test/ui/polymorphization/generators.rs
@@ -1,6 +1,5 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
-#![feature(const_generics, generators, generator_trait)]
+#![feature(const_generics, generators, generator_trait, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
 use std::marker::Unpin;
@@ -30,6 +29,7 @@ where
 
 // This test checks that the polymorphization analysis functions on generators.
 
+#[rustc_polymorphize_error]
 pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
     //~^ ERROR item has unused generic parameters
     || {
@@ -39,6 +39,7 @@ pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin
     }
 }
 
+#[rustc_polymorphize_error]
 pub fn used_type_in_yield<Y: Default>() -> impl Generator<(), Yield = Y, Return = u32> + Unpin {
     || {
         yield Y::default();
@@ -46,6 +47,7 @@ pub fn used_type_in_yield<Y: Default>() -> impl Generator<(), Yield = Y, Return
     }
 }
 
+#[rustc_polymorphize_error]
 pub fn used_type_in_return<R: Default>() -> impl Generator<(), Yield = u32, Return = R> + Unpin {
     || {
         yield 3;
@@ -53,6 +55,7 @@ pub fn used_type_in_return<R: Default>() -> impl Generator<(), Yield = u32, Retu
     }
 }
 
+#[rustc_polymorphize_error]
 pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
     //~^ ERROR item has unused generic parameters
     || {
@@ -62,6 +65,7 @@ pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return =
     }
 }
 
+#[rustc_polymorphize_error]
 pub fn used_const_in_yield<const Y: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin
 {
     || {
@@ -70,6 +74,7 @@ pub fn used_const_in_yield<const Y: u32>() -> impl Generator<(), Yield = u32, Re
     }
 }
 
+#[rustc_polymorphize_error]
 pub fn used_const_in_return<const R: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin
 {
     || {
diff --git a/src/test/ui/polymorphization/generators.stderr b/src/test/ui/polymorphization/generators.stderr
index 9e3ee130234..b3e5a2de027 100644
--- a/src/test/ui/polymorphization/generators.stderr
+++ b/src/test/ui/polymorphization/generators.stderr
@@ -1,7 +1,7 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/generators.rs:3:12
+  --> $DIR/generators.rs:2:12
    |
-LL | #![feature(const_generics, generators, generator_trait)]
+LL | #![feature(const_generics, generators, generator_trait, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
    |
    = note: `#[warn(incomplete_features)]` on by default
@@ -27,7 +27,7 @@ LL | pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> +
    |        ^^^^^^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/generators.rs:58:5
+  --> $DIR/generators.rs:61:5
    |
 LL |   pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
    |                             - generic parameter `T` is unused
@@ -40,7 +40,7 @@ LL | |     }
    | |_____^
 
 error: item has unused generic parameters
-  --> $DIR/generators.rs:56:8
+  --> $DIR/generators.rs:59:8
    |
 LL | pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
    |        ^^^^^^^^^^^^       - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/lifetimes.rs b/src/test/ui/polymorphization/lifetimes.rs
index 873a9c7baaa..4bde349a336 100644
--- a/src/test/ui/polymorphization/lifetimes.rs
+++ b/src/test/ui/polymorphization/lifetimes.rs
@@ -1,18 +1,20 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
+#![feature(rustc_attrs)]
 
 // This test checks that the polymorphization analysis doesn't break when the
 // function/closure doesn't just have generic parameters.
 
 // Function has an unused generic parameter.
+#[rustc_polymorphize_error]
 pub fn unused<'a, T>(_: &'a u32) {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
 }
 
+#[rustc_polymorphize_error]
 pub fn used<'a, T: Default>(_: &'a u32) -> u32 {
     let _: T = Default::default();
     let add_one = |x: u32| x + 1;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     add_one(3)
 }
 
diff --git a/src/test/ui/polymorphization/lifetimes.stderr b/src/test/ui/polymorphization/lifetimes.stderr
index 5629857f85e..6c85e4f2916 100644
--- a/src/test/ui/polymorphization/lifetimes.stderr
+++ b/src/test/ui/polymorphization/lifetimes.stderr
@@ -1,11 +1,11 @@
 error: item has unused generic parameters
-  --> $DIR/lifetimes.rs:8:8
+  --> $DIR/lifetimes.rs:9:8
    |
 LL | pub fn unused<'a, T>(_: &'a u32) {
    |        ^^^^^^     - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/lifetimes.rs:14:19
+  --> $DIR/lifetimes.rs:16:19
    |
 LL | pub fn used<'a, T: Default>(_: &'a u32) -> u32 {
    |                 - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/predicates.rs b/src/test/ui/polymorphization/predicates.rs
index 49f8668cff8..390ac983aa0 100644
--- a/src/test/ui/polymorphization/predicates.rs
+++ b/src/test/ui/polymorphization/predicates.rs
@@ -1,13 +1,15 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
+#![feature(rustc_attrs)]
 
 // This test checks that `T` is considered used in `foo`, because it is used in a predicate for
 // `I`, which is used.
 
+#[rustc_polymorphize_error]
 fn bar<I>() {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
 }
 
+#[rustc_polymorphize_error]
 fn foo<I, T>(_: I)
 where
     I: Iterator<Item = T>,
diff --git a/src/test/ui/polymorphization/predicates.stderr b/src/test/ui/polymorphization/predicates.stderr
index b7bc2ccce57..1b266083463 100644
--- a/src/test/ui/polymorphization/predicates.stderr
+++ b/src/test/ui/polymorphization/predicates.stderr
@@ -1,5 +1,5 @@
 error: item has unused generic parameters
-  --> $DIR/predicates.rs:7:4
+  --> $DIR/predicates.rs:8:4
    |
 LL | fn bar<I>() {
    |    ^^^ - generic parameter `I` is unused
diff --git a/src/test/ui/polymorphization/too-many-generic-params.rs b/src/test/ui/polymorphization/too-many-generic-params.rs
index 3bb77a1c1e6..4b296c01908 100644
--- a/src/test/ui/polymorphization/too-many-generic-params.rs
+++ b/src/test/ui/polymorphization/too-many-generic-params.rs
@@ -1,9 +1,10 @@
 // build-pass
-// compile-flags: -Zpolymorphize-errors
+#![feature(rustc_attrs)]
 
 // This test checks that the analysis doesn't panic when there are >64 generic parameters, but
 // instead considers those parameters used.
 
+#[rustc_polymorphize_error]
 fn bar<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA,
        AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW,
        AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK, BL>()
diff --git a/src/test/ui/polymorphization/type_parameters/closures.rs b/src/test/ui/polymorphization/type_parameters/closures.rs
index cf5a4b1cec5..1fbe13380b5 100644
--- a/src/test/ui/polymorphization/type_parameters/closures.rs
+++ b/src/test/ui/polymorphization/type_parameters/closures.rs
@@ -1,31 +1,36 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
+#![feature(stmt_expr_attributes, rustc_attrs)]
 
 // This test checks that the polymorphization analysis correctly detects unused type
 // parameters in closures.
 
 // Function doesn't have any generic parameters to be unused.
+#[rustc_polymorphize_error]
 pub fn no_parameters() {
     let _ = || {};
 }
 
 // Function has an unused generic parameter in parent and closure.
+#[rustc_polymorphize_error]
 pub fn unused<T>() -> u32 {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
+
     let add_one = |x: u32| x + 1;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     add_one(3)
 }
 
 // Function has an unused generic parameter in closure, but not in parent.
+#[rustc_polymorphize_error]
 pub fn used_parent<T: Default>() -> u32 {
     let _: T = Default::default();
     let add_one = |x: u32| x + 1;
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
     add_one(3)
 }
 
 // Function uses generic parameter in value of a binding in closure.
+#[rustc_polymorphize_error]
 pub fn used_binding_value<T: Default>() -> T {
     let x = || {
         let y: T = Default::default();
@@ -36,6 +41,7 @@ pub fn used_binding_value<T: Default>() -> T {
 }
 
 // Function uses generic parameter in generic of a binding in closure.
+#[rustc_polymorphize_error]
 pub fn used_binding_generic<T>() -> Option<T> {
     let x = || {
         let y: Option<T> = None;
@@ -46,26 +52,32 @@ pub fn used_binding_generic<T>() -> Option<T> {
 }
 
 // Function and closure uses generic parameter in argument.
+#[rustc_polymorphize_error]
 pub fn used_argument<T>(t: T) -> u32 {
     let x = |_: T| 3;
     x(t)
 }
 
 // Closure uses generic parameter in argument.
+#[rustc_polymorphize_error]
 pub fn used_argument_closure<T: Default>() -> u32 {
     let t: T = Default::default();
+
     let x = |_: T| 3;
     x(t)
 }
 
 // Closure uses generic parameter as upvar.
+#[rustc_polymorphize_error]
 pub fn used_upvar<T: Default>() -> T {
     let x: T = Default::default();
+
     let y = || x;
     y()
 }
 
 // Closure uses generic parameter in substitutions to another function.
+#[rustc_polymorphize_error]
 pub fn used_substs<T>() -> u32 {
     let x = || unused::<T>();
     x()
@@ -75,14 +87,16 @@ struct Foo<F>(F);
 
 impl<F: Default> Foo<F> {
     // Function has an unused generic parameter from impl and fn.
+    #[rustc_polymorphize_error]
     pub fn unused_all<G: Default>() -> u32 {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
         let add_one = |x: u32| x + 1;
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
         add_one(3)
     }
 
     // Function uses generic parameter from impl and fn in closure.
+    #[rustc_polymorphize_error]
     pub fn used_both<G: Default>() -> u32 {
         let add_one = |x: u32| {
             let _: F = Default::default();
@@ -94,10 +108,11 @@ impl<F: Default> Foo<F> {
     }
 
     // Function uses generic parameter from fn in closure.
+    #[rustc_polymorphize_error]
     pub fn used_fn<G: Default>() -> u32 {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
         let add_one = |x: u32| {
-//~^ ERROR item has unused generic parameters
+            //~^ ERROR item has unused generic parameters
             let _: G = Default::default();
             x + 1
         };
@@ -106,10 +121,11 @@ impl<F: Default> Foo<F> {
     }
 
     // Function uses generic parameter from impl in closure.
+    #[rustc_polymorphize_error]
     pub fn used_impl<G: Default>() -> u32 {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
         let add_one = |x: u32| {
-//~^ ERROR item has unused generic parameters
+            //~^ ERROR item has unused generic parameters
             let _: F = Default::default();
             x + 1
         };
@@ -118,6 +134,7 @@ impl<F: Default> Foo<F> {
     }
 
     // Closure uses generic parameter in substitutions to another function.
+    #[rustc_polymorphize_error]
     pub fn used_substs() -> u32 {
         let x = || unused::<F>();
         x()
diff --git a/src/test/ui/polymorphization/type_parameters/closures.stderr b/src/test/ui/polymorphization/type_parameters/closures.stderr
index 914cb628bd0..d68e6e25a1e 100644
--- a/src/test/ui/polymorphization/type_parameters/closures.stderr
+++ b/src/test/ui/polymorphization/type_parameters/closures.stderr
@@ -1,20 +1,20 @@
 error: item has unused generic parameters
-  --> $DIR/closures.rs:15:19
+  --> $DIR/closures.rs:18:19
    |
 LL | pub fn unused<T>() -> u32 {
    |               - generic parameter `T` is unused
-LL |
+...
 LL |     let add_one = |x: u32| x + 1;
    |                   ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:13:8
+  --> $DIR/closures.rs:15:8
    |
 LL | pub fn unused<T>() -> u32 {
    |        ^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:23:19
+  --> $DIR/closures.rs:27:19
    |
 LL | pub fn used_parent<T: Default>() -> u32 {
    |                    - generic parameter `T` is unused
@@ -23,11 +23,11 @@ LL |     let add_one = |x: u32| x + 1;
    |                   ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:80:23
+  --> $DIR/closures.rs:93:23
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
-LL |     // Function has an unused generic parameter from impl and fn.
+...
 LL |     pub fn unused_all<G: Default>() -> u32 {
    |                       - generic parameter `G` is unused
 LL |
@@ -35,16 +35,16 @@ LL |         let add_one = |x: u32| x + 1;
    |                       ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:78:12
+  --> $DIR/closures.rs:91:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
-LL |     // Function has an unused generic parameter from impl and fn.
+...
 LL |     pub fn unused_all<G: Default>() -> u32 {
    |            ^^^^^^^^^^ - generic parameter `G` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:111:23
+  --> $DIR/closures.rs:127:23
    |
 LL |       pub fn used_impl<G: Default>() -> u32 {
    |                        - generic parameter `G` is unused
@@ -58,13 +58,13 @@ LL | |         };
    | |_________^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:109:12
+  --> $DIR/closures.rs:125:12
    |
 LL |     pub fn used_impl<G: Default>() -> u32 {
    |            ^^^^^^^^^ - generic parameter `G` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:99:23
+  --> $DIR/closures.rs:114:23
    |
 LL |   impl<F: Default> Foo<F> {
    |        - generic parameter `F` is unused
@@ -78,7 +78,7 @@ LL | |         };
    | |_________^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:97:12
+  --> $DIR/closures.rs:112:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
diff --git a/src/test/ui/polymorphization/type_parameters/functions.rs b/src/test/ui/polymorphization/type_parameters/functions.rs
index 3caf2631a57..38f10148c2c 100644
--- a/src/test/ui/polymorphization/type_parameters/functions.rs
+++ b/src/test/ui/polymorphization/type_parameters/functions.rs
@@ -1,32 +1,37 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
+#![feature(rustc_attrs)]
 
 // This test checks that the polymorphization analysis correctly detects unused type
 // parameters in functions.
 
 // Function doesn't have any generic parameters to be unused.
+#[rustc_polymorphize_error]
 pub fn no_parameters() {}
 
 // Function has an unused generic parameter.
+#[rustc_polymorphize_error]
 pub fn unused<T>() {
-//~^ ERROR item has unused generic parameters
+    //~^ ERROR item has unused generic parameters
 }
 
 // Function uses generic parameter in value of a binding.
+#[rustc_polymorphize_error]
 pub fn used_binding_value<T: Default>() {
     let _: T = Default::default();
 }
 
 // Function uses generic parameter in generic of a binding.
+#[rustc_polymorphize_error]
 pub fn used_binding_generic<T>() {
     let _: Option<T> = None;
 }
 
 // Function uses generic parameter in argument.
-pub fn used_argument<T>(_: T) {
-}
+#[rustc_polymorphize_error]
+pub fn used_argument<T>(_: T) {}
 
 // Function uses generic parameter in substitutions to another function.
+#[rustc_polymorphize_error]
 pub fn used_substs<T>() {
     unused::<T>()
 }
@@ -35,33 +40,39 @@ struct Foo<F>(F);
 
 impl<F: Default> Foo<F> {
     // Function has an unused generic parameter from impl.
+    #[rustc_polymorphize_error]
     pub fn unused_impl() {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
     }
 
     // Function has an unused generic parameter from impl and fn.
+    #[rustc_polymorphize_error]
     pub fn unused_both<G: Default>() {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
     }
 
     // Function uses generic parameter from impl.
+    #[rustc_polymorphize_error]
     pub fn used_impl() {
         let _: F = Default::default();
     }
 
     // Function uses generic parameter from impl.
+    #[rustc_polymorphize_error]
     pub fn used_fn<G: Default>() {
-//~^ ERROR item has unused generic parameters
+        //~^ ERROR item has unused generic parameters
         let _: G = Default::default();
     }
 
     // Function uses generic parameter from impl.
+    #[rustc_polymorphize_error]
     pub fn used_both<G: Default>() {
         let _: F = Default::default();
         let _: G = Default::default();
     }
 
     // Function uses generic parameter in substitutions to another function.
+    #[rustc_polymorphize_error]
     pub fn used_substs() {
         unused::<F>()
     }
diff --git a/src/test/ui/polymorphization/type_parameters/functions.stderr b/src/test/ui/polymorphization/type_parameters/functions.stderr
index a34e677a765..be4c6576e96 100644
--- a/src/test/ui/polymorphization/type_parameters/functions.stderr
+++ b/src/test/ui/polymorphization/type_parameters/functions.stderr
@@ -1,20 +1,20 @@
 error: item has unused generic parameters
-  --> $DIR/functions.rs:11:8
+  --> $DIR/functions.rs:13:8
    |
 LL | pub fn unused<T>() {
    |        ^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:38:12
+  --> $DIR/functions.rs:44:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
-LL |     // Function has an unused generic parameter from impl.
+...
 LL |     pub fn unused_impl() {
    |            ^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:43:12
+  --> $DIR/functions.rs:50:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
@@ -23,7 +23,7 @@ LL |     pub fn unused_both<G: Default>() {
    |            ^^^^^^^^^^^ - generic parameter `G` is unused
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:53:12
+  --> $DIR/functions.rs:62:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
diff --git a/src/test/ui/polymorphization/unsized_cast.rs b/src/test/ui/polymorphization/unsized_cast.rs
index 3bc25d18981..d2f3d4f13cd 100644
--- a/src/test/ui/polymorphization/unsized_cast.rs
+++ b/src/test/ui/polymorphization/unsized_cast.rs
@@ -1,10 +1,10 @@
 // build-fail
-// compile-flags: -Zpolymorphize-errors
-#![feature(fn_traits, unboxed_closures)]
+#![feature(fn_traits, rustc_attrs, unboxed_closures)]
 
 // This test checks that the polymorphization analysis considers a closure
 // as using all generic parameters if it does an unsizing cast.
 
+#[rustc_polymorphize_error]
 fn foo<T: Default>() {
     let _: T = Default::default();
     (|| Box::new(|| {}) as Box<dyn Fn()>)();
@@ -12,6 +12,7 @@ fn foo<T: Default>() {
     //~^^ ERROR item has unused generic parameters
 }
 
+#[rustc_polymorphize_error]
 fn foo2<T: Default>() {
     let _: T = Default::default();
     (|| {
diff --git a/src/test/ui/polymorphization/unsized_cast.stderr b/src/test/ui/polymorphization/unsized_cast.stderr
index 61fd3884117..b8b96bbdf15 100644
--- a/src/test/ui/polymorphization/unsized_cast.stderr
+++ b/src/test/ui/polymorphization/unsized_cast.stderr
@@ -17,7 +17,7 @@ LL |     (|| Box::new(|| {}) as Box<dyn Fn()>)();
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/unsized_cast.rs:19:15
+  --> $DIR/unsized_cast.rs:20:15
    |
 LL | fn foo2<T: Default>() {
    |         - generic parameter `T` is unused