1- // skip-filecheck
21// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32//@ unit-test: CopyProp
43
@@ -14,7 +13,16 @@ fn cmp_ref(a: &u8, b: &u8) -> bool {
1413}
1514
1615#[ 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)
1826 mir ! (
1927 {
2028 let a = 5_u8 ;
@@ -34,8 +42,60 @@ fn f() -> bool {
3442 )
3543}
3644
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+
3794fn main ( ) {
38- assert ! ( !f( ) ) ;
95+ assert ! ( !compare_address( ) ) ;
96+ non_freeze ( 5 ) ;
3997}
4098
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