File tree 2 files changed +62
-0
lines changed
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