@@ -1100,6 +1100,53 @@ fn dereference_indexing(array: [u8; 2], index: usize) {
11001100 opaque ( * a) ;
11011101}
11021102
1103+ // EMIT_MIR gvn.dereference_reborrow.GVN.diff
1104+ fn dereference_reborrow ( mut_a : & mut u8 ) {
1105+ // CHECK-LABEL: fn dereference_reborrow(
1106+ // CHECK: debug a => [[a:_.*]];
1107+ // CHECK: debug b => [[b:_.*]];
1108+ // CHECK: debug c => [[c:_.*]];
1109+ // CHECK: [[a]] = &(*_1);
1110+ // CHECK: [[b]] = copy (*[[a]]);
1111+ // CHECK: [[c]] = copy [[b]];
1112+ let a = & * mut_a;
1113+ let b = * a;
1114+ let c = * a;
1115+ }
1116+
1117+ struct FieldBorrow < ' a > ( & ' a u8 ) ;
1118+
1119+ // EMIT_MIR gvn.field_borrow.GVN.diff
1120+ fn field_borrow ( a : & FieldBorrow < ' _ > ) {
1121+ // CHECK-LABEL: fn field_borrow(
1122+ // CHECK: debug b => [[b:_.*]];
1123+ // CHECK: debug c => [[c:_.*]];
1124+ // CHECK: [[b]] = copy ((*_1).0: &u8);
1125+ // CHECK: [[c]] = copy [[b]];
1126+ let b = a. 0 ;
1127+ let c = a. 0 ;
1128+ }
1129+
1130+ // EMIT_MIR gvn.field_borrow_2.GVN.diff
1131+ fn field_borrow_2 ( a : & & FieldBorrow < ' _ > ) {
1132+ // CHECK-LABEL: fn field_borrow_2(
1133+ // CHECK: debug b => [[b:_.*]];
1134+ // CHECK: debug c => [[c:_.*]];
1135+ // CHECK: debug d => [[d:_.*]];
1136+ // CHECK: debug e => [[e:_.*]];
1137+ // CHECK: debug f => [[f:_.*]];
1138+ // CHECK: [[b]] = copy (*_1);
1139+ // CHECK: [[c]] = copy ((*[[b]]).0: &u8);
1140+ // CHECK: [[d]] = copy (*_1);
1141+ // CHECK: [[e]] = copy ((*[[d]]).0: &u8);
1142+ // CHECK: [[f]] = copy [[e]];
1143+ let b = * a;
1144+ let c = b. 0 ;
1145+ let d = * a;
1146+ let e = d. 0 ;
1147+ let f = d. 0 ;
1148+ }
1149+
11031150// CHECK-LABEL: fn main(
11041151fn main ( ) {
11051152 subexpression_elimination ( 2 , 4 , 5 ) ;
@@ -1129,6 +1176,9 @@ fn main() {
11291176 meta_of_ref_to_slice ( & 42 ) ;
11301177 slice_from_raw_parts_as_ptr ( & 123 , 456 ) ;
11311178 dereference_indexing ( [ 129 , 14 ] , 5 ) ;
1179+ dereference_reborrow ( & mut 5 ) ;
1180+ field_borrow ( & FieldBorrow ( & 0 ) ) ;
1181+ field_borrow ( & & FieldBorrow ( & 0 ) ) ;
11321182}
11331183
11341184#[ inline( never) ]
0 commit comments