File tree Expand file tree Collapse file tree 3 files changed +64
-2
lines changed Expand file tree Collapse file tree 3 files changed +64
-2
lines changed Original file line number Diff line number Diff line change 1+ //@ known-bug: #144293 
2+ // Same as recursion-etc but eggs LLVM emission into giving indirect arguments. 
3+ #![ expect( incomplete_features) ]  
4+ #![ feature( explicit_tail_calls) ]  
5+ 
6+ use  std:: hint:: black_box; 
7+ 
8+ struct  U64Wrapper  { 
9+     pub  x :  u64 , 
10+     pub  arbitrary :  String , 
11+ } 
12+ 
13+ fn  count ( curr :  U64Wrapper ,  top :  U64Wrapper )  -> U64Wrapper  { 
14+     if  black_box ( curr. x )  >= top. x  { 
15+         curr
16+     }  else  { 
17+         become  count( 
18+             U64Wrapper  { 
19+                 x :  curr. x  + 1 , 
20+                 arbitrary :  curr. arbitrary , 
21+             } , 
22+             top, 
23+         ) 
24+     } 
25+ } 
26+ 
27+ fn  main ( )  { 
28+     println ! ( 
29+         "{}" , 
30+         count( 
31+             U64Wrapper  { 
32+                 x:  0 , 
33+                 arbitrary:  "hello!" . into( ) 
34+             } , 
35+             black_box( U64Wrapper  { 
36+                 x:  1000000 , 
37+                 arbitrary:  "goodbye!" . into( ) 
38+             } ) 
39+         ) 
40+         . x
41+     ) ; 
42+ } 
Original file line number Diff line number Diff line change 1- // FIXME(explicit_tail_calls): enable this test once rustc_codegen_ssa supports tail calls 
2- //@ ignore-test: tail calls are not implemented in rustc_codegen_ssa yet, so this causes 🧊 
31//@ run-pass 
42#![ expect( incomplete_features) ]  
53#![ feature( explicit_tail_calls) ]  
Original file line number Diff line number Diff line change 1+ //@ run-pass 
2+ // Indexing taken from 
3+ // https://github.com/phi-go/rfcs/blob/guaranteed-tco/text%2F0000-explicit-tail-calls.md#tail-call-elimination 
4+ // no other test has utilized the "function table" 
5+ // described in the RFC aside from this one at this point. 
6+ #![ expect( incomplete_features) ]  
7+ #![ feature( explicit_tail_calls) ]  
8+ 
9+ fn  f0 ( _:  usize )  { } 
10+ fn  f1 ( _:  usize )  { } 
11+ fn  f2 ( _:  usize )  { } 
12+ 
13+ fn  indexer ( idx :  usize )  { 
14+     let  v:  [ fn ( usize ) ;  3 ]  = [ f0,  f1,  f2] ; 
15+     become v[ idx] ( idx) 
16+ } 
17+ 
18+ fn  main ( )  { 
19+     for  idx in  0 ..3  { 
20+         indexer ( idx) ; 
21+     } 
22+ } 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments