11// build-fail
2- // compile-flags: -Zpolymorphize-errors
3- #![ feature( const_generics) ]
2+ #![ feature( const_generics, rustc_attrs) ]
43//~^ WARN the feature `const_generics` is incomplete
54
65// This test checks that the polymorphization analysis correctly detects unused const
76// parameters in closures.
87
98// Function doesn't have any generic parameters to be unused.
9+ #[ rustc_polymorphize_error]
1010pub fn no_parameters ( ) {
1111 let _ = || { } ;
1212}
1313
1414// Function has an unused generic parameter in parent and closure.
15+ #[ rustc_polymorphize_error]
1516pub fn unused < const T : usize > ( ) -> usize {
16- //~^ ERROR item has unused generic parameters
17+ //~^ ERROR item has unused generic parameters
1718 let add_one = |x : usize | x + 1 ;
18- //~^ ERROR item has unused generic parameters
19+ //~^ ERROR item has unused generic parameters
1920 add_one ( 3 )
2021}
2122
2223// Function has an unused generic parameter in closure, but not in parent.
24+ #[ rustc_polymorphize_error]
2325pub fn used_parent < const T : usize > ( ) -> usize {
2426 let x: usize = T ;
2527 let add_one = |x : usize | x + 1 ;
26- //~^ ERROR item has unused generic parameters
28+ //~^ ERROR item has unused generic parameters
2729 x + add_one ( 3 )
2830}
2931
3032// Function uses generic parameter in value of a binding in closure.
33+ #[ rustc_polymorphize_error]
3134pub fn used_binding < const T : usize > ( ) -> usize {
3235 let x = || {
3336 let y: usize = T ;
@@ -38,14 +41,16 @@ pub fn used_binding<const T: usize>() -> usize {
3841}
3942
4043// Closure uses a value as an upvar, which used the generic parameter.
44+ #[ rustc_polymorphize_error]
4145pub fn unused_upvar < const T : usize > ( ) -> usize {
4246 let x: usize = T ;
4347 let y = || x;
44- //~^ ERROR item has unused generic parameters
48+ //~^ ERROR item has unused generic parameters
4549 y ( )
4650}
4751
4852// Closure uses generic parameter in substitutions to another function.
53+ #[ rustc_polymorphize_error]
4954pub fn used_substs < const T : usize > ( ) -> usize {
5055 let x = || unused :: < T > ( ) ;
5156 x ( )
0 commit comments