| // build-fail |
| // compile-flags:-Zpolymorphize=on |
| #![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()>)(); |
| //~^ ERROR item has unused generic parameters |
| //~^^ ERROR item has unused generic parameters |
| } |
| |
| #[rustc_polymorphize_error] |
| 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 |
| })(); |
| } |
| |
| fn main() { |
| foo::<u32>(); |
| foo2::<u32>(); |
| } |