2
2
use std:: mem:: MaybeUninit ;
3
3
4
4
// 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.
5
7
// And without support for loops.
6
8
7
9
macro_rules! const_repeat {
@@ -17,27 +19,27 @@ macro_rules! const_repeat {
17
19
} } ;
18
20
// Recursive case: Take a 16
19
21
( [ 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 )
25
27
} } ;
26
28
// Recursive case: Take a 8
27
29
( [ 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 )
31
33
} } ;
32
34
// Recursive case: Take a 4
33
35
( [ 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 )
36
38
} } ;
37
39
// Recursive case: Take a 2
38
40
( [ 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 )
41
43
} } ;
42
44
}
43
45
macro_rules! expensive_static {
0 commit comments