File tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ // run-pass
2+ //
3+ // This is derived from a change to compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs, in
4+ // preparation for adopting let-else within the compiler (thanks @est31):
5+ //
6+ // ```
7+ // - let place = if let mir::VarDebugInfoContents::Place(p) = var.value { p } else { continue };
8+ // + let mir::VarDebugInfoContents::Place(place) = var.value else { continue };
9+ // ```
10+ //
11+ // The move was due to mir::Place being Copy, but mir::VarDebugInfoContents not being Copy.
12+
13+ #![ feature( let_else) ]
14+
15+ #[ derive( Copy , Clone ) ]
16+ struct Copyable ;
17+
18+ enum NonCopy {
19+ Thing ( Copyable ) ,
20+ #[ allow( unused) ]
21+ Other ,
22+ }
23+
24+ struct Wrapper {
25+ field : NonCopy ,
26+ }
27+
28+ fn let_else ( ) {
29+ let vec = vec ! [ Wrapper { field: NonCopy :: Thing ( Copyable ) } ] ;
30+ for item in & vec {
31+ let NonCopy :: Thing ( _copyable) = item. field else { continue } ;
32+ }
33+ }
34+
35+ fn if_let ( ) {
36+ let vec = vec ! [ Wrapper { field: NonCopy :: Thing ( Copyable ) } ] ;
37+ for item in & vec {
38+ let _copyable = if let NonCopy :: Thing ( copyable) = item. field { copyable } else { continue } ;
39+ }
40+ }
41+
42+ fn main ( ) {
43+ let_else ( ) ;
44+ if_let ( ) ;
45+ }
Original file line number Diff line number Diff line change 1+ // run-pass
2+ // issue #89688
3+
4+ #![ feature( let_else) ]
5+
6+ fn example_let_else ( value : Option < String > ) {
7+ let Some ( inner) = value else {
8+ println ! ( "other: {:?}" , value) ; // OK
9+ return ;
10+ } ;
11+ println ! ( "inner: {}" , inner) ;
12+ }
13+
14+ fn main ( ) {
15+ example_let_else ( Some ( "foo" . into ( ) ) ) ;
16+ example_let_else ( None ) ;
17+ }
You can’t perform that action at this time.
0 commit comments