1
- // skip-filecheck
2
1
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
3
2
//@ unit-test: CopyProp
4
3
@@ -14,7 +13,16 @@ fn cmp_ref(a: &u8, b: &u8) -> bool {
14
13
}
15
14
16
15
#[ custom_mir( dialect = "analysis" , phase = "post-cleanup" ) ]
17
- fn f ( ) -> bool {
16
+ fn compare_address ( ) -> bool {
17
+ // CHECK-LABEL: fn compare_address(
18
+ // CHECK: bb0: {
19
+ // CHECK-NEXT: _1 = const 5_u8;
20
+ // CHECK-NEXT: _2 = &_1;
21
+ // CHECK-NEXT: _3 = _1;
22
+ // CHECK-NEXT: _4 = &_3;
23
+ // CHECK-NEXT: _0 = cmp_ref(_2, _4)
24
+ // CHECK: bb1: {
25
+ // CHECK-NEXT: _0 = opaque::<u8>(_3)
18
26
mir ! (
19
27
{
20
28
let a = 5_u8 ;
@@ -34,8 +42,60 @@ fn f() -> bool {
34
42
)
35
43
}
36
44
45
+ #[ custom_mir( dialect = "analysis" , phase = "post-cleanup" ) ]
46
+ fn borrowed ( x : u32 ) -> bool {
47
+ // CHECK-LABEL: fn borrowed(
48
+ // CHECK: bb0: {
49
+ // CHECK-NEXT: _2 = _1;
50
+ // CHECK-NEXT: _3 = &_1;
51
+ // CHECK-NEXT: _0 = opaque::<&u32>(_3)
52
+ // CHECK: bb1: {
53
+ // CHECK-NEXT: _0 = opaque::<u32>(_2)
54
+ mir ! (
55
+ {
56
+ let a = x;
57
+ let r1 = & x;
58
+ Call ( RET = opaque( r1) , ReturnTo ( next) , UnwindContinue ( ) )
59
+ }
60
+ next = {
61
+ Call ( RET = opaque( a) , ReturnTo ( ret) , UnwindContinue ( ) )
62
+ }
63
+ ret = {
64
+ Return ( )
65
+ }
66
+ )
67
+ }
68
+
69
+ /// Generic type `T` is not known to be `Freeze`, so shared borrows may be mutable.
70
+ #[ custom_mir( dialect = "analysis" , phase = "post-cleanup" ) ]
71
+ fn non_freeze < T : Copy > ( x : T ) -> bool {
72
+ // CHECK-LABEL: fn non_freeze(
73
+ // CHECK: bb0: {
74
+ // CHECK-NEXT: _2 = _1;
75
+ // CHECK-NEXT: _3 = &_1;
76
+ // CHECK-NEXT: _0 = opaque::<&T>(_3)
77
+ // CHECK: bb1: {
78
+ // CHECK-NEXT: _0 = opaque::<T>(_2)
79
+ mir ! (
80
+ {
81
+ let a = x;
82
+ let r1 = & x;
83
+ Call ( RET = opaque( r1) , ReturnTo ( next) , UnwindContinue ( ) )
84
+ }
85
+ next = {
86
+ Call ( RET = opaque( a) , ReturnTo ( ret) , UnwindContinue ( ) )
87
+ }
88
+ ret = {
89
+ Return ( )
90
+ }
91
+ )
92
+ }
93
+
37
94
fn main ( ) {
38
- assert ! ( !f( ) ) ;
95
+ assert ! ( !compare_address( ) ) ;
96
+ non_freeze ( 5 ) ;
39
97
}
40
98
41
- // EMIT_MIR borrowed_local.f.CopyProp.diff
99
+ // EMIT_MIR borrowed_local.compare_address.CopyProp.diff
100
+ // EMIT_MIR borrowed_local.borrowed.CopyProp.diff
101
+ // EMIT_MIR borrowed_local.non_freeze.CopyProp.diff
0 commit comments