about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2020-07-22 15:03:56 +0100
committerDavid Wood <david@davidtw.co>2020-07-22 15:36:24 +0100
commitf39ed207fe25a39fba59d120efcdb56e30d19183 (patch)
treee251f63ea21c1fa46a29e2968009335b50f64a12
parent90e941a974e3561efa18c148de24db1f401cd3c4 (diff)
downloadrust-f39ed207fe25a39fba59d120efcdb56e30d19183.tar.gz
rust-f39ed207fe25a39fba59d120efcdb56e30d19183.zip
sess: disable polymorphisation
This commit disables polymorphisation to resolve regressions related to
closures which inherit unused generic parameters and are then used in
casts or reflection.

Signed-off-by: David Wood <david@davidtw.co>
-rw-r--r--src/librustc_session/options.rs2
-rw-r--r--src/test/codegen-units/item-collection/static-init.rs2
-rw-r--r--src/test/codegen-units/item-collection/trait-method-default-impl.rs2
-rw-r--r--src/test/codegen-units/polymorphization/unused_type_parameters.rs2
-rw-r--r--src/test/ui/polymorphization/const_parameters/closures.rs1
-rw-r--r--src/test/ui/polymorphization/const_parameters/closures.stderr10
-rw-r--r--src/test/ui/polymorphization/const_parameters/functions.rs1
-rw-r--r--src/test/ui/polymorphization/const_parameters/functions.stderr4
-rw-r--r--src/test/ui/polymorphization/drop_shims/simple.rs1
-rw-r--r--src/test/ui/polymorphization/drop_shims/transitive.rs1
-rw-r--r--src/test/ui/polymorphization/generators.rs1
-rw-r--r--src/test/ui/polymorphization/generators.stderr10
-rw-r--r--src/test/ui/polymorphization/lifetimes.rs1
-rw-r--r--src/test/ui/polymorphization/lifetimes.stderr4
-rw-r--r--src/test/ui/polymorphization/normalized_sig_types.rs1
-rw-r--r--src/test/ui/polymorphization/predicates.rs1
-rw-r--r--src/test/ui/polymorphization/predicates.stderr2
-rw-r--r--src/test/ui/polymorphization/type_parameters/closures.rs1
-rw-r--r--src/test/ui/polymorphization/type_parameters/closures.stderr18
-rw-r--r--src/test/ui/polymorphization/type_parameters/functions.rs1
-rw-r--r--src/test/ui/polymorphization/type_parameters/functions.stderr8
-rw-r--r--src/test/ui/polymorphization/unsized_cast.rs1
-rw-r--r--src/test/ui/polymorphization/unsized_cast.stderr6
23 files changed, 46 insertions, 35 deletions
diff --git a/src/librustc_session/options.rs b/src/librustc_session/options.rs
index 6b2097240e2..73696ed35e2 100644
--- a/src/librustc_session/options.rs
+++ b/src/librustc_session/options.rs
@@ -949,7 +949,7 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
         (default: PLT is disabled if full relro is enabled)"),
     polonius: bool = (false, parse_bool, [UNTRACKED],
         "enable polonius-based borrow-checker (default: no)"),
-    polymorphize: bool = (true, parse_bool, [TRACKED],
+    polymorphize: bool = (false, parse_bool, [TRACKED],
           "perform polymorphization analysis"),
     pre_link_arg: (/* redirected to pre_link_args */) = ((), parse_string_push, [UNTRACKED],
         "a single extra argument to prepend the linker invocation (can be used several times)"),
diff --git a/src/test/codegen-units/item-collection/static-init.rs b/src/test/codegen-units/item-collection/static-init.rs
index aebccff01fc..9d79171c4cb 100644
--- a/src/test/codegen-units/item-collection/static-init.rs
+++ b/src/test/codegen-units/item-collection/static-init.rs
@@ -1,4 +1,4 @@
-// compile-flags:-Zprint-mono-items=eager
+// compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on
 
 #![feature(start)]
 
diff --git a/src/test/codegen-units/item-collection/trait-method-default-impl.rs b/src/test/codegen-units/item-collection/trait-method-default-impl.rs
index abe2d108eae..6cf59fdc396 100644
--- a/src/test/codegen-units/item-collection/trait-method-default-impl.rs
+++ b/src/test/codegen-units/item-collection/trait-method-default-impl.rs
@@ -1,4 +1,4 @@
-// compile-flags:-Zprint-mono-items=eager
+// compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on
 
 #![deny(dead_code)]
 #![feature(start)]
diff --git a/src/test/codegen-units/polymorphization/unused_type_parameters.rs b/src/test/codegen-units/polymorphization/unused_type_parameters.rs
index dc2ad0559b3..403f68bb170 100644
--- a/src/test/codegen-units/polymorphization/unused_type_parameters.rs
+++ b/src/test/codegen-units/polymorphization/unused_type_parameters.rs
@@ -1,4 +1,4 @@
-// compile-flags:-Zprint-mono-items=lazy -Copt-level=1
+// compile-flags:-Zpolymorphize=on -Zprint-mono-items=lazy -Copt-level=1
 // ignore-tidy-linelength
 
 #![crate_type = "rlib"]
diff --git a/src/test/ui/polymorphization/const_parameters/closures.rs b/src/test/ui/polymorphization/const_parameters/closures.rs
index 7bbcaebea01..f20605e1b9a 100644
--- a/src/test/ui/polymorphization/const_parameters/closures.rs
+++ b/src/test/ui/polymorphization/const_parameters/closures.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(const_generics, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
diff --git a/src/test/ui/polymorphization/const_parameters/closures.stderr b/src/test/ui/polymorphization/const_parameters/closures.stderr
index eb872eac74c..266b6e62afd 100644
--- a/src/test/ui/polymorphization/const_parameters/closures.stderr
+++ b/src/test/ui/polymorphization/const_parameters/closures.stderr
@@ -1,5 +1,5 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/closures.rs:2:12
+  --> $DIR/closures.rs:3:12
    |
 LL | #![feature(const_generics, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, rustc_attrs)]
    = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:18:19
+  --> $DIR/closures.rs:19: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:16:8
+  --> $DIR/closures.rs:17:8
    |
 LL | pub fn unused<const T: usize>() -> usize {
    |        ^^^^^^       - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:27:19
+  --> $DIR/closures.rs:28: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:47:13
+  --> $DIR/closures.rs:48: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 77539b94e48..04c279de29e 100644
--- a/src/test/ui/polymorphization/const_parameters/functions.rs
+++ b/src/test/ui/polymorphization/const_parameters/functions.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(const_generics, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
diff --git a/src/test/ui/polymorphization/const_parameters/functions.stderr b/src/test/ui/polymorphization/const_parameters/functions.stderr
index c99a9b788eb..e379e32c1fc 100644
--- a/src/test/ui/polymorphization/const_parameters/functions.stderr
+++ b/src/test/ui/polymorphization/const_parameters/functions.stderr
@@ -1,5 +1,5 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/functions.rs:2:12
+  --> $DIR/functions.rs:3:12
    |
 LL | #![feature(const_generics, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, rustc_attrs)]
    = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:14:8
+  --> $DIR/functions.rs:15:8
    |
 LL | pub fn unused<const T: usize>() {
    |        ^^^^^^       - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/drop_shims/simple.rs b/src/test/ui/polymorphization/drop_shims/simple.rs
index ce56b7a3588..2695dc6d4f1 100644
--- a/src/test/ui/polymorphization/drop_shims/simple.rs
+++ b/src/test/ui/polymorphization/drop_shims/simple.rs
@@ -1,4 +1,5 @@
 // check-pass
+// compile-flags:-Zpolymorphize=on
 
 pub struct OnDrop<F: Fn()>(pub F);
 
diff --git a/src/test/ui/polymorphization/drop_shims/transitive.rs b/src/test/ui/polymorphization/drop_shims/transitive.rs
index b7ea07b6bc6..c2289117109 100644
--- a/src/test/ui/polymorphization/drop_shims/transitive.rs
+++ b/src/test/ui/polymorphization/drop_shims/transitive.rs
@@ -1,4 +1,5 @@
 // check-pass
+// compile-flags:-Zpolymorphize=on
 
 pub struct OnDrop<F: Fn()>(pub F);
 
diff --git a/src/test/ui/polymorphization/generators.rs b/src/test/ui/polymorphization/generators.rs
index 1acba7c8bf1..9eb34fb7349 100644
--- a/src/test/ui/polymorphization/generators.rs
+++ b/src/test/ui/polymorphization/generators.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(const_generics, generators, generator_trait, rustc_attrs)]
 //~^ WARN the feature `const_generics` is incomplete
 
diff --git a/src/test/ui/polymorphization/generators.stderr b/src/test/ui/polymorphization/generators.stderr
index b3e5a2de027..c59055ba9d6 100644
--- a/src/test/ui/polymorphization/generators.stderr
+++ b/src/test/ui/polymorphization/generators.stderr
@@ -1,5 +1,5 @@
 warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
-  --> $DIR/generators.rs:2:12
+  --> $DIR/generators.rs:3:12
    |
 LL | #![feature(const_generics, generators, generator_trait, rustc_attrs)]
    |            ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, generators, generator_trait, rustc_attrs)]
    = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
 
 error: item has unused generic parameters
-  --> $DIR/generators.rs:35:5
+  --> $DIR/generators.rs:36:5
    |
 LL |   pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
    |                      - generic parameter `T` is unused
@@ -21,13 +21,13 @@ LL | |     }
    | |_____^
 
 error: item has unused generic parameters
-  --> $DIR/generators.rs:33:8
+  --> $DIR/generators.rs:34:8
    |
 LL | pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
    |        ^^^^^^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/generators.rs:61:5
+  --> $DIR/generators.rs:62: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:59:8
+  --> $DIR/generators.rs:60: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 4bde349a336..f26df45230a 100644
--- a/src/test/ui/polymorphization/lifetimes.rs
+++ b/src/test/ui/polymorphization/lifetimes.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(rustc_attrs)]
 
 // This test checks that the polymorphization analysis doesn't break when the
diff --git a/src/test/ui/polymorphization/lifetimes.stderr b/src/test/ui/polymorphization/lifetimes.stderr
index 6c85e4f2916..2020256717c 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:9:8
+  --> $DIR/lifetimes.rs:10:8
    |
 LL | pub fn unused<'a, T>(_: &'a u32) {
    |        ^^^^^^     - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/lifetimes.rs:16:19
+  --> $DIR/lifetimes.rs:17:19
    |
 LL | pub fn used<'a, T: Default>(_: &'a u32) -> u32 {
    |                 - generic parameter `T` is unused
diff --git a/src/test/ui/polymorphization/normalized_sig_types.rs b/src/test/ui/polymorphization/normalized_sig_types.rs
index fa76b7201e8..d732b1071d8 100644
--- a/src/test/ui/polymorphization/normalized_sig_types.rs
+++ b/src/test/ui/polymorphization/normalized_sig_types.rs
@@ -1,4 +1,5 @@
 // build-pass
+// compile-flags:-Zpolymorphize=on
 
 pub trait ParallelIterator: Sized {
     fn drive<C: Consumer<()>>(_: C) {
diff --git a/src/test/ui/polymorphization/predicates.rs b/src/test/ui/polymorphization/predicates.rs
index 390ac983aa0..82a94933b47 100644
--- a/src/test/ui/polymorphization/predicates.rs
+++ b/src/test/ui/polymorphization/predicates.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(rustc_attrs)]
 
 // This test checks that `T` is considered used in `foo`, because it is used in a predicate for
diff --git a/src/test/ui/polymorphization/predicates.stderr b/src/test/ui/polymorphization/predicates.stderr
index 1b266083463..c23730fc995 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:8:4
+  --> $DIR/predicates.rs:9:4
    |
 LL | fn bar<I>() {
    |    ^^^ - generic parameter `I` is unused
diff --git a/src/test/ui/polymorphization/type_parameters/closures.rs b/src/test/ui/polymorphization/type_parameters/closures.rs
index 1fbe13380b5..07ab1355a47 100644
--- a/src/test/ui/polymorphization/type_parameters/closures.rs
+++ b/src/test/ui/polymorphization/type_parameters/closures.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(stmt_expr_attributes, rustc_attrs)]
 
 // This test checks that the polymorphization analysis correctly detects unused type
diff --git a/src/test/ui/polymorphization/type_parameters/closures.stderr b/src/test/ui/polymorphization/type_parameters/closures.stderr
index d68e6e25a1e..417feebbc55 100644
--- a/src/test/ui/polymorphization/type_parameters/closures.stderr
+++ b/src/test/ui/polymorphization/type_parameters/closures.stderr
@@ -1,5 +1,5 @@
 error: item has unused generic parameters
-  --> $DIR/closures.rs:18:19
+  --> $DIR/closures.rs:19:19
    |
 LL | pub fn unused<T>() -> u32 {
    |               - generic parameter `T` is unused
@@ -8,13 +8,13 @@ LL |     let add_one = |x: u32| x + 1;
    |                   ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:15:8
+  --> $DIR/closures.rs:16:8
    |
 LL | pub fn unused<T>() -> u32 {
    |        ^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:27:19
+  --> $DIR/closures.rs:28:19
    |
 LL | pub fn used_parent<T: Default>() -> u32 {
    |                    - generic parameter `T` is unused
@@ -23,7 +23,7 @@ LL |     let add_one = |x: u32| x + 1;
    |                   ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:93:23
+  --> $DIR/closures.rs:94:23
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
@@ -35,7 +35,7 @@ LL |         let add_one = |x: u32| x + 1;
    |                       ^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:91:12
+  --> $DIR/closures.rs:92:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
@@ -44,7 +44,7 @@ LL |     pub fn unused_all<G: Default>() -> u32 {
    |            ^^^^^^^^^^ - generic parameter `G` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:127:23
+  --> $DIR/closures.rs:128: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:125:12
+  --> $DIR/closures.rs:126:12
    |
 LL |     pub fn used_impl<G: Default>() -> u32 {
    |            ^^^^^^^^^ - generic parameter `G` is unused
 
 error: item has unused generic parameters
-  --> $DIR/closures.rs:114:23
+  --> $DIR/closures.rs:115: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:112:12
+  --> $DIR/closures.rs:113: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 38f10148c2c..aad957e1dd3 100644
--- a/src/test/ui/polymorphization/type_parameters/functions.rs
+++ b/src/test/ui/polymorphization/type_parameters/functions.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(rustc_attrs)]
 
 // This test checks that the polymorphization analysis correctly detects unused type
diff --git a/src/test/ui/polymorphization/type_parameters/functions.stderr b/src/test/ui/polymorphization/type_parameters/functions.stderr
index be4c6576e96..d629ff7bb4d 100644
--- a/src/test/ui/polymorphization/type_parameters/functions.stderr
+++ b/src/test/ui/polymorphization/type_parameters/functions.stderr
@@ -1,11 +1,11 @@
 error: item has unused generic parameters
-  --> $DIR/functions.rs:13:8
+  --> $DIR/functions.rs:14:8
    |
 LL | pub fn unused<T>() {
    |        ^^^^^^ - generic parameter `T` is unused
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:44:12
+  --> $DIR/functions.rs:45:12
    |
 LL | impl<F: Default> Foo<F> {
    |      - generic parameter `F` is unused
@@ -14,7 +14,7 @@ LL |     pub fn unused_impl() {
    |            ^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/functions.rs:50:12
+  --> $DIR/functions.rs:51: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:62:12
+  --> $DIR/functions.rs:63: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 d2f3d4f13cd..b8facc16070 100644
--- a/src/test/ui/polymorphization/unsized_cast.rs
+++ b/src/test/ui/polymorphization/unsized_cast.rs
@@ -1,4 +1,5 @@
 // build-fail
+// compile-flags:-Zpolymorphize=on
 #![feature(fn_traits, rustc_attrs, unboxed_closures)]
 
 // This test checks that the polymorphization analysis considers a closure
diff --git a/src/test/ui/polymorphization/unsized_cast.stderr b/src/test/ui/polymorphization/unsized_cast.stderr
index b8b96bbdf15..d4727acca9a 100644
--- a/src/test/ui/polymorphization/unsized_cast.stderr
+++ b/src/test/ui/polymorphization/unsized_cast.stderr
@@ -1,5 +1,5 @@
 error: item has unused generic parameters
-  --> $DIR/unsized_cast.rs:10:18
+  --> $DIR/unsized_cast.rs:11:18
    |
 LL | fn foo<T: Default>() {
    |        - generic parameter `T` is unused
@@ -8,7 +8,7 @@ LL |     (|| Box::new(|| {}) as Box<dyn Fn()>)();
    |                  ^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/unsized_cast.rs:10:5
+  --> $DIR/unsized_cast.rs:11:5
    |
 LL | fn foo<T: Default>() {
    |        - generic parameter `T` is unused
@@ -17,7 +17,7 @@ LL |     (|| Box::new(|| {}) as Box<dyn Fn()>)();
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: item has unused generic parameters
-  --> $DIR/unsized_cast.rs:20:15
+  --> $DIR/unsized_cast.rs:21:15
    |
 LL | fn foo2<T: Default>() {
    |         - generic parameter `T` is unused