Skip to content

Commit bbebe73

Browse files
committed
Auto merge of #74633 - davidtwco:issue-74614-disable-polymorphisation, r=wesleywiser
Disable polymorphisation Fixes #74614. This PR disables polymorphisation to fix the regression in #74614 after investigation into the issue makes it clear that the fix won't be trivial. ~~I'll file an issue shortly to replace #74614 with the findings so far.~~ #74636 has been filed to track the fix of the underlying regression. r? @eddyb
2 parents 9e92106 + 799d52e commit bbebe73

25 files changed

+66
-37
lines changed

src/librustc_mir/monomorphize/collector.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -627,8 +627,9 @@ impl<'a, 'tcx> MirVisitor<'tcx> for MirNeighborCollector<'a, 'tcx> {
627627
Ok(val) => collect_const_value(self.tcx, val, self.output),
628628
Err(ErrorHandled::Reported(ErrorReported) | ErrorHandled::Linted) => {}
629629
Err(ErrorHandled::TooGeneric) => span_bug!(
630-
self.tcx.def_span(def.did),
631-
"collection encountered polymorphic constant",
630+
self.body.source_info(location).span,
631+
"collection encountered polymorphic constant: {}",
632+
substituted_constant
632633
),
633634
}
634635
}

src/librustc_session/options.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,7 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
949949
(default: PLT is disabled if full relro is enabled)"),
950950
polonius: bool = (false, parse_bool, [UNTRACKED],
951951
"enable polonius-based borrow-checker (default: no)"),
952-
polymorphize: bool = (true, parse_bool, [TRACKED],
952+
polymorphize: bool = (false, parse_bool, [TRACKED],
953953
"perform polymorphization analysis"),
954954
pre_link_arg: (/* redirected to pre_link_args */) = ((), parse_string_push, [UNTRACKED],
955955
"a single extra argument to prepend the linker invocation (can be used several times)"),

src/test/codegen-units/item-collection/static-init.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// compile-flags:-Zprint-mono-items=eager
1+
// compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on
22

33
#![feature(start)]
44

src/test/codegen-units/item-collection/trait-method-default-impl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// compile-flags:-Zprint-mono-items=eager
1+
// compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on
22

33
#![deny(dead_code)]
44
#![feature(start)]

src/test/codegen-units/polymorphization/unused_type_parameters.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// compile-flags:-Zprint-mono-items=lazy -Copt-level=1
1+
// compile-flags:-Zpolymorphize=on -Zprint-mono-items=lazy -Copt-level=1
22
// ignore-tidy-linelength
33

44
#![crate_type = "rlib"]

src/test/ui/issues/issue-74614.rs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// build-pass
2+
3+
fn test<T>() {
4+
std::mem::size_of::<T>();
5+
}
6+
7+
pub fn foo<T>(_: T) -> &'static fn() {
8+
&(test::<T> as fn())
9+
}
10+
11+
fn outer<T>() {
12+
foo(|| ());
13+
}
14+
15+
fn main() {
16+
outer::<u8>();
17+
}

src/test/ui/polymorphization/const_parameters/closures.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(const_generics, rustc_attrs)]
34
//~^ WARN the feature `const_generics` is incomplete
45

src/test/ui/polymorphization/const_parameters/closures.stderr

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
2-
--> $DIR/closures.rs:2:12
2+
--> $DIR/closures.rs:3:12
33
|
44
LL | #![feature(const_generics, rustc_attrs)]
55
| ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, rustc_attrs)]
88
= note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
99

1010
error: item has unused generic parameters
11-
--> $DIR/closures.rs:18:19
11+
--> $DIR/closures.rs:19:19
1212
|
1313
LL | pub fn unused<const T: usize>() -> usize {
1414
| - generic parameter `T` is unused
@@ -17,13 +17,13 @@ LL | let add_one = |x: usize| x + 1;
1717
| ^^^^^^^^^^^^^^^^
1818

1919
error: item has unused generic parameters
20-
--> $DIR/closures.rs:16:8
20+
--> $DIR/closures.rs:17:8
2121
|
2222
LL | pub fn unused<const T: usize>() -> usize {
2323
| ^^^^^^ - generic parameter `T` is unused
2424

2525
error: item has unused generic parameters
26-
--> $DIR/closures.rs:27:19
26+
--> $DIR/closures.rs:28:19
2727
|
2828
LL | pub fn used_parent<const T: usize>() -> usize {
2929
| - generic parameter `T` is unused
@@ -32,7 +32,7 @@ LL | let add_one = |x: usize| x + 1;
3232
| ^^^^^^^^^^^^^^^^
3333

3434
error: item has unused generic parameters
35-
--> $DIR/closures.rs:47:13
35+
--> $DIR/closures.rs:48:13
3636
|
3737
LL | pub fn unused_upvar<const T: usize>() -> usize {
3838
| - generic parameter `T` is unused

src/test/ui/polymorphization/const_parameters/functions.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(const_generics, rustc_attrs)]
34
//~^ WARN the feature `const_generics` is incomplete
45

src/test/ui/polymorphization/const_parameters/functions.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
2-
--> $DIR/functions.rs:2:12
2+
--> $DIR/functions.rs:3:12
33
|
44
LL | #![feature(const_generics, rustc_attrs)]
55
| ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, rustc_attrs)]
88
= note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
99

1010
error: item has unused generic parameters
11-
--> $DIR/functions.rs:14:8
11+
--> $DIR/functions.rs:15:8
1212
|
1313
LL | pub fn unused<const T: usize>() {
1414
| ^^^^^^ - generic parameter `T` is unused

src/test/ui/polymorphization/drop_shims/simple.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// check-pass
2+
// compile-flags:-Zpolymorphize=on
23

34
pub struct OnDrop<F: Fn()>(pub F);
45

src/test/ui/polymorphization/drop_shims/transitive.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// check-pass
2+
// compile-flags:-Zpolymorphize=on
23

34
pub struct OnDrop<F: Fn()>(pub F);
45

src/test/ui/polymorphization/generators.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(const_generics, generators, generator_trait, rustc_attrs)]
34
//~^ WARN the feature `const_generics` is incomplete
45

src/test/ui/polymorphization/generators.stderr

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes
2-
--> $DIR/generators.rs:2:12
2+
--> $DIR/generators.rs:3:12
33
|
44
LL | #![feature(const_generics, generators, generator_trait, rustc_attrs)]
55
| ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(const_generics, generators, generator_trait, rustc_attrs)]
88
= note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information
99

1010
error: item has unused generic parameters
11-
--> $DIR/generators.rs:35:5
11+
--> $DIR/generators.rs:36:5
1212
|
1313
LL | pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
1414
| - generic parameter `T` is unused
@@ -21,13 +21,13 @@ LL | | }
2121
| |_____^
2222

2323
error: item has unused generic parameters
24-
--> $DIR/generators.rs:33:8
24+
--> $DIR/generators.rs:34:8
2525
|
2626
LL | pub fn unused_type<T>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
2727
| ^^^^^^^^^^^ - generic parameter `T` is unused
2828

2929
error: item has unused generic parameters
30-
--> $DIR/generators.rs:61:5
30+
--> $DIR/generators.rs:62:5
3131
|
3232
LL | pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
3333
| - generic parameter `T` is unused
@@ -40,7 +40,7 @@ LL | | }
4040
| |_____^
4141

4242
error: item has unused generic parameters
43-
--> $DIR/generators.rs:59:8
43+
--> $DIR/generators.rs:60:8
4444
|
4545
LL | pub fn unused_const<const T: u32>() -> impl Generator<(), Yield = u32, Return = u32> + Unpin {
4646
| ^^^^^^^^^^^^ - generic parameter `T` is unused

src/test/ui/polymorphization/lifetimes.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(rustc_attrs)]
34

45
// This test checks that the polymorphization analysis doesn't break when the

src/test/ui/polymorphization/lifetimes.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
error: item has unused generic parameters
2-
--> $DIR/lifetimes.rs:9:8
2+
--> $DIR/lifetimes.rs:10:8
33
|
44
LL | pub fn unused<'a, T>(_: &'a u32) {
55
| ^^^^^^ - generic parameter `T` is unused
66

77
error: item has unused generic parameters
8-
--> $DIR/lifetimes.rs:16:19
8+
--> $DIR/lifetimes.rs:17:19
99
|
1010
LL | pub fn used<'a, T: Default>(_: &'a u32) -> u32 {
1111
| - generic parameter `T` is unused

src/test/ui/polymorphization/normalized_sig_types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-pass
2+
// compile-flags:-Zpolymorphize=on
23

34
pub trait ParallelIterator: Sized {
45
fn drive<C: Consumer<()>>(_: C) {

src/test/ui/polymorphization/predicates.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(rustc_attrs)]
34

45
// This test checks that `T` is considered used in `foo`, because it is used in a predicate for

src/test/ui/polymorphization/predicates.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: item has unused generic parameters
2-
--> $DIR/predicates.rs:8:4
2+
--> $DIR/predicates.rs:9:4
33
|
44
LL | fn bar<I>() {
55
| ^^^ - generic parameter `I` is unused

src/test/ui/polymorphization/type_parameters/closures.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(stmt_expr_attributes, rustc_attrs)]
34

45
// This test checks that the polymorphization analysis correctly detects unused type

src/test/ui/polymorphization/type_parameters/closures.stderr

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: item has unused generic parameters
2-
--> $DIR/closures.rs:18:19
2+
--> $DIR/closures.rs:19:19
33
|
44
LL | pub fn unused<T>() -> u32 {
55
| - generic parameter `T` is unused
@@ -8,13 +8,13 @@ LL | let add_one = |x: u32| x + 1;
88
| ^^^^^^^^^^^^^^
99

1010
error: item has unused generic parameters
11-
--> $DIR/closures.rs:15:8
11+
--> $DIR/closures.rs:16:8
1212
|
1313
LL | pub fn unused<T>() -> u32 {
1414
| ^^^^^^ - generic parameter `T` is unused
1515

1616
error: item has unused generic parameters
17-
--> $DIR/closures.rs:27:19
17+
--> $DIR/closures.rs:28:19
1818
|
1919
LL | pub fn used_parent<T: Default>() -> u32 {
2020
| - generic parameter `T` is unused
@@ -23,7 +23,7 @@ LL | let add_one = |x: u32| x + 1;
2323
| ^^^^^^^^^^^^^^
2424

2525
error: item has unused generic parameters
26-
--> $DIR/closures.rs:93:23
26+
--> $DIR/closures.rs:94:23
2727
|
2828
LL | impl<F: Default> Foo<F> {
2929
| - generic parameter `F` is unused
@@ -35,7 +35,7 @@ LL | let add_one = |x: u32| x + 1;
3535
| ^^^^^^^^^^^^^^
3636

3737
error: item has unused generic parameters
38-
--> $DIR/closures.rs:91:12
38+
--> $DIR/closures.rs:92:12
3939
|
4040
LL | impl<F: Default> Foo<F> {
4141
| - generic parameter `F` is unused
@@ -44,7 +44,7 @@ LL | pub fn unused_all<G: Default>() -> u32 {
4444
| ^^^^^^^^^^ - generic parameter `G` is unused
4545

4646
error: item has unused generic parameters
47-
--> $DIR/closures.rs:127:23
47+
--> $DIR/closures.rs:128:23
4848
|
4949
LL | pub fn used_impl<G: Default>() -> u32 {
5050
| - generic parameter `G` is unused
@@ -58,13 +58,13 @@ LL | | };
5858
| |_________^
5959

6060
error: item has unused generic parameters
61-
--> $DIR/closures.rs:125:12
61+
--> $DIR/closures.rs:126:12
6262
|
6363
LL | pub fn used_impl<G: Default>() -> u32 {
6464
| ^^^^^^^^^ - generic parameter `G` is unused
6565

6666
error: item has unused generic parameters
67-
--> $DIR/closures.rs:114:23
67+
--> $DIR/closures.rs:115:23
6868
|
6969
LL | impl<F: Default> Foo<F> {
7070
| - generic parameter `F` is unused
@@ -78,7 +78,7 @@ LL | | };
7878
| |_________^
7979

8080
error: item has unused generic parameters
81-
--> $DIR/closures.rs:112:12
81+
--> $DIR/closures.rs:113:12
8282
|
8383
LL | impl<F: Default> Foo<F> {
8484
| - generic parameter `F` is unused

src/test/ui/polymorphization/type_parameters/functions.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(rustc_attrs)]
34

45
// This test checks that the polymorphization analysis correctly detects unused type

src/test/ui/polymorphization/type_parameters/functions.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
error: item has unused generic parameters
2-
--> $DIR/functions.rs:13:8
2+
--> $DIR/functions.rs:14:8
33
|
44
LL | pub fn unused<T>() {
55
| ^^^^^^ - generic parameter `T` is unused
66

77
error: item has unused generic parameters
8-
--> $DIR/functions.rs:44:12
8+
--> $DIR/functions.rs:45:12
99
|
1010
LL | impl<F: Default> Foo<F> {
1111
| - generic parameter `F` is unused
@@ -14,7 +14,7 @@ LL | pub fn unused_impl() {
1414
| ^^^^^^^^^^^
1515

1616
error: item has unused generic parameters
17-
--> $DIR/functions.rs:50:12
17+
--> $DIR/functions.rs:51:12
1818
|
1919
LL | impl<F: Default> Foo<F> {
2020
| - generic parameter `F` is unused
@@ -23,7 +23,7 @@ LL | pub fn unused_both<G: Default>() {
2323
| ^^^^^^^^^^^ - generic parameter `G` is unused
2424

2525
error: item has unused generic parameters
26-
--> $DIR/functions.rs:62:12
26+
--> $DIR/functions.rs:63:12
2727
|
2828
LL | impl<F: Default> Foo<F> {
2929
| - generic parameter `F` is unused

src/test/ui/polymorphization/unsized_cast.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// build-fail
2+
// compile-flags:-Zpolymorphize=on
23
#![feature(fn_traits, rustc_attrs, unboxed_closures)]
34

45
// This test checks that the polymorphization analysis considers a closure

src/test/ui/polymorphization/unsized_cast.stderr

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: item has unused generic parameters
2-
--> $DIR/unsized_cast.rs:10:18
2+
--> $DIR/unsized_cast.rs:11:18
33
|
44
LL | fn foo<T: Default>() {
55
| - generic parameter `T` is unused
@@ -8,7 +8,7 @@ LL | (|| Box::new(|| {}) as Box<dyn Fn()>)();
88
| ^^^^^
99

1010
error: item has unused generic parameters
11-
--> $DIR/unsized_cast.rs:10:5
11+
--> $DIR/unsized_cast.rs:11:5
1212
|
1313
LL | fn foo<T: Default>() {
1414
| - generic parameter `T` is unused
@@ -17,7 +17,7 @@ LL | (|| Box::new(|| {}) as Box<dyn Fn()>)();
1717
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1818

1919
error: item has unused generic parameters
20-
--> $DIR/unsized_cast.rs:20:15
20+
--> $DIR/unsized_cast.rs:21:15
2121
|
2222
LL | fn foo2<T: Default>() {
2323
| - generic parameter `T` is unused

0 commit comments

Comments
 (0)