Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/librustc_mir/monomorphize/polymorphize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,13 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for UsedGenericParametersVisitor<'a, 'tcx> {
self.unused_parameters.clear(param.index);
false
}
ty::ConstKind::Unevaluated(_, _, Some(p)) => {
// If there is a promoted, don't look at the substs - since it will always contain
// the generic parameters, instead, traverse the promoted MIR.
let promoted = self.tcx.promoted_mir(self.def_id);
self.visit_body(&promoted[p]);
false
}
_ => c.super_visit_with(self),
}
}
Expand Down
12 changes: 12 additions & 0 deletions src/test/ui/polymorphization/promoted-function-1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// build-fail
// compile-flags: -Zpolymorphize=on
#![crate_type = "lib"]
#![feature(rustc_attrs)]

fn foo<'a>(_: &'a ()) {}

#[rustc_polymorphize_error]
pub fn test<T>() {
//~^ ERROR item has unused generic parameters
foo(&());
}
8 changes: 8 additions & 0 deletions src/test/ui/polymorphization/promoted-function-1.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: item has unused generic parameters
--> $DIR/promoted-function-1.rs:9:8
|
LL | pub fn test<T>() {
| ^^^^ - generic parameter `T` is unused

error: aborting due to previous error

2 changes: 2 additions & 0 deletions src/test/ui/polymorphization/promoted-function.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
// run-pass
// compile-flags:-Zpolymorphize=on

fn fop<T>() {}

fn bar<T>() -> &'static fn() {
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/polymorphization/unsized_cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ fn foo<T: Default>() {
fn foo2<T: Default>() {
let _: T = Default::default();
(|| {
//~^ ERROR item has unused generic parameters
let call: extern "rust-call" fn(_, _) = Fn::call;
call(&|| {}, ());
//~^ ERROR item has unused generic parameters
Expand Down
18 changes: 16 additions & 2 deletions src/test/ui/polymorphization/unsized_cast.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,27 @@ LL | (|| Box::new(|| {}) as Box<dyn Fn()>)();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: item has unused generic parameters
--> $DIR/unsized_cast.rs:21:15
--> $DIR/unsized_cast.rs:22:15
|
LL | fn foo2<T: Default>() {
| - generic parameter `T` is unused
...
LL | call(&|| {}, ());
| ^^^^^

error: aborting due to 3 previous errors
error: item has unused generic parameters
--> $DIR/unsized_cast.rs:19:5
|
LL | fn foo2<T: Default>() {
| - generic parameter `T` is unused
LL | let _: T = Default::default();
LL | / (|| {
LL | |
LL | | let call: extern "rust-call" fn(_, _) = Fn::call;
LL | | call(&|| {}, ());
LL | |
LL | | })();
| |______^

error: aborting due to 4 previous errors