22use std:: mem:: MaybeUninit ;
33
44// Try to make CTFE actually do a lot of computation, without producing a big result.
5+ // The const fn expressions evaluated here take a dummy u32 argument because otherwise
6+ // const fn memoisation is able to eliminate a lot of the work.
57// And without support for loops.
68
79macro_rules! const_repeat {
@@ -17,27 +19,27 @@ macro_rules! const_repeat {
1719 } } ;
1820 // Recursive case: Take a 16
1921 ( [ 16 $( $n: tt) * ] $e: expr, $T: ty) => { {
20- const fn e( ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
21- e( ) ; e( ) ; e( ) ; e( ) ;
22- e( ) ; e( ) ; e( ) ; e( ) ;
23- e( ) ; e( ) ; e( ) ; e( ) ;
24- e( ) ; e( ) ; e( ) ; e( )
22+ const fn e( _ : u32 ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
23+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 ) ;
24+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 ) ;
25+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 ) ;
26+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 )
2527 } } ;
2628 // Recursive case: Take a 8
2729 ( [ 8 $( $n: tt) * ] $e: expr, $T: ty) => { {
28- const fn e( ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
29- e( ) ; e( ) ; e( ) ; e( ) ;
30- e( ) ; e( ) ; e( ) ; e( )
30+ const fn e( _ : u32 ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
31+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 ) ;
32+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 )
3133 } } ;
3234 // Recursive case: Take a 4
3335 ( [ 4 $( $n: tt) * ] $e: expr, $T: ty) => { {
34- const fn e( ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
35- e( ) ; e( ) ; e( ) ; e( )
36+ const fn e( _ : u32 ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
37+ e( 0 ) ; e( 0 ) ; e( 0 ) ; e( 0 )
3638 } } ;
3739 // Recursive case: Take a 2
3840 ( [ 2 $( $n: tt) * ] $e: expr, $T: ty) => { {
39- const fn e( ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
40- e( ) ; e( )
41+ const fn e( _ : u32 ) -> $T { const_repeat!( [ $( $n) * ] $e, $T) }
42+ e( 0 ) ; e( 0 )
4143 } } ;
4244}
4345macro_rules! expensive_static {
0 commit comments