Skip to content

Commit 566fcb8

Browse files
Auto merge of #147083 - dianne:non-extended-indices, r=<try>
Do not lifetime-extend array/slice indices
2 parents 6244eff + c0dc979 commit 566fcb8

8 files changed

+31
-32
lines changed

compiler/rustc_mir_build/src/builder/expr/as_place.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
454454
index,
455455
mutability,
456456
fake_borrow_temps,
457-
expr.temp_lifetime,
458457
expr_span,
459458
source_info,
460459
),
@@ -625,7 +624,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
625624
index: ExprId,
626625
mutability: Mutability,
627626
fake_borrow_temps: Option<&mut Vec<Local>>,
628-
temp_lifetime: TempLifetime,
629627
expr_span: Span,
630628
source_info: SourceInfo,
631629
) -> BlockAnd<PlaceBuilder<'tcx>> {
@@ -639,7 +637,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
639637
// Making this a *fresh* temporary means we do not have to worry about
640638
// the index changing later: Nothing will ever change this temporary.
641639
// The "retagging" transformation (for Stacked Borrows) relies on this.
642-
let idx = unpack!(block = self.as_temp(block, temp_lifetime, index, Mutability::Not));
640+
let index_lifetime = self.thir[index].temp_lifetime;
641+
let idx = unpack!(block = self.as_temp(block, index_lifetime, index, Mutability::Not));
643642

644643
block = self.bounds_check(block, &base_place, idx, expr_span, source_info);
645644

tests/mir-opt/gvn.dereference_indexing.GVN.panic-abort.diff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
- StorageDead(_4);
4242
+ _3 = &_1[_4];
4343
+ nop;
44+
StorageDead(_6);
4445
StorageLive(_8);
4546
StorageLive(_9);
4647
- _9 = copy (*_3);
@@ -52,7 +53,6 @@
5253
StorageDead(_9);
5354
StorageDead(_8);
5455
_0 = const ();
55-
StorageDead(_6);
5656
StorageDead(_3);
5757
return;
5858
}

tests/mir-opt/gvn.dereference_indexing.GVN.panic-unwind.diff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
- StorageDead(_4);
4242
+ _3 = &_1[_4];
4343
+ nop;
44+
StorageDead(_6);
4445
StorageLive(_8);
4546
StorageLive(_9);
4647
- _9 = copy (*_3);
@@ -52,7 +53,6 @@
5253
StorageDead(_9);
5354
StorageDead(_8);
5455
_0 = const ();
55-
StorageDead(_6);
5656
StorageDead(_3);
5757
return;
5858
}

tests/mir-opt/gvn.wide_ptr_same_provenance.GVN.panic-abort.diff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
- StorageDead(_4);
9090
+ _3 = copy _4;
9191
+ nop;
92+
StorageDead(_8);
9293
StorageDead(_7);
9394
StorageDead(_5);
9495
StorageLive(_10);
@@ -116,6 +117,7 @@
116117
- StorageDead(_11);
117118
+ _10 = copy _11;
118119
+ nop;
120+
StorageDead(_15);
119121
StorageDead(_14);
120122
StorageDead(_12);
121123
StorageLive(_17);
@@ -251,9 +253,7 @@
251253
StorageDead(_43);
252254
StorageDead(_42);
253255
_0 = const ();
254-
StorageDead(_15);
255256
StorageDead(_10);
256-
StorageDead(_8);
257257
StorageDead(_3);
258258
StorageDead(_1);
259259
return;

tests/mir-opt/gvn.wide_ptr_same_provenance.GVN.panic-unwind.diff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
- StorageDead(_4);
9090
+ _3 = copy _4;
9191
+ nop;
92+
StorageDead(_8);
9293
StorageDead(_7);
9394
StorageDead(_5);
9495
StorageLive(_10);
@@ -116,6 +117,7 @@
116117
- StorageDead(_11);
117118
+ _10 = copy _11;
118119
+ nop;
120+
StorageDead(_15);
119121
StorageDead(_14);
120122
StorageDead(_12);
121123
StorageLive(_17);
@@ -251,9 +253,7 @@
251253
StorageDead(_43);
252254
StorageDead(_42);
253255
_0 = const ();
254-
StorageDead(_15);
255256
StorageDead(_10);
256-
StorageDead(_8);
257257
StorageDead(_3);
258258
StorageDead(_1);
259259
return;

tests/mir-opt/issue_91633.fun.built.after.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ fn fun(_1: &[T]) -> &T {
2323
bb1: {
2424
_2 = &(*_1)[_3];
2525
FakeRead(ForLet(None), _2);
26-
_0 = &(*_2);
2726
StorageDead(_3);
27+
_0 = &(*_2);
2828
StorageDead(_2);
2929
return;
3030
}

tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
| '?1 | Local | ['?1]
66
|
77
| Inferred Region Values
8-
| '?0 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?0, '?1}
9-
| '?1 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?1}
10-
| '?2 | U0 | {bb1[0..=7], bb2[0..=2]}
11-
| '?3 | U0 | {bb1[1..=7], bb2[0..=2]}
12-
| '?4 | U0 | {bb1[4..=7], bb2[0..=2]}
8+
| '?0 | U0 | {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?0, '?1}
9+
| '?1 | U0 | {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?1}
10+
| '?2 | U0 | {bb1[0..=8], bb2[0..=2]}
11+
| '?3 | U0 | {bb1[1..=8], bb2[0..=2]}
12+
| '?4 | U0 | {bb1[5..=8], bb2[0..=2]}
1313
|
1414
| Inference Constraints
15-
| '?0 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]}
16-
| '?1 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]}
15+
| '?0 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]}
16+
| '?1 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]}
1717
| '?2 live at {bb1[0]}
18-
| '?3 live at {bb1[1..=3]}
19-
| '?4 live at {bb1[4..=7], bb2[0..=2]}
18+
| '?3 live at {bb1[1..=4]}
19+
| '?4 live at {bb1[5..=8], bb2[0..=2]}
2020
| '?2: '?3 due to Assignment at Single(bb1[0]) ($DIR/region_subtyping_basic.rs:19:13: 19:18 (#0)
21-
| '?3: '?4 due to Assignment at Single(bb1[3]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0)
21+
| '?3: '?4 due to Assignment at Single(bb1[4]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0)
2222
|
2323
| Borrows
2424
| bw0: issued at bb1[0] in '?2
@@ -59,6 +59,7 @@ fn main() -> () {
5959
bb1: {
6060
_2 = &'?2 _1[_3];
6161
FakeRead(ForLet(None), _2);
62+
StorageDead(_3);
6263
StorageLive(_5);
6364
_5 = copy _2;
6465
FakeRead(ForLet(None), _5);
@@ -95,7 +96,6 @@ fn main() -> () {
9596
bb6: {
9697
StorageDead(_6);
9798
StorageDead(_5);
98-
StorageDead(_3);
9999
StorageDead(_2);
100100
StorageDead(_1);
101101
return;

tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
| '?1 | Local | ['?1]
66
|
77
| Inferred Region Values
8-
| '?0 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?0, '?1}
9-
| '?1 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?1}
10-
| '?2 | U0 | {bb1[0..=7], bb2[0..=2]}
11-
| '?3 | U0 | {bb1[1..=7], bb2[0..=2]}
12-
| '?4 | U0 | {bb1[4..=7], bb2[0..=2]}
8+
| '?0 | U0 | {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?0, '?1}
9+
| '?1 | U0 | {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?1}
10+
| '?2 | U0 | {bb1[0..=8], bb2[0..=2]}
11+
| '?3 | U0 | {bb1[1..=8], bb2[0..=2]}
12+
| '?4 | U0 | {bb1[5..=8], bb2[0..=2]}
1313
|
1414
| Inference Constraints
15-
| '?0 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]}
16-
| '?1 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]}
15+
| '?0 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]}
16+
| '?1 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]}
1717
| '?2 live at {bb1[0]}
18-
| '?3 live at {bb1[1..=3]}
19-
| '?4 live at {bb1[4..=7], bb2[0..=2]}
18+
| '?3 live at {bb1[1..=4]}
19+
| '?4 live at {bb1[5..=8], bb2[0..=2]}
2020
| '?2: '?3 due to Assignment at Single(bb1[0]) ($DIR/region_subtyping_basic.rs:19:13: 19:18 (#0)
21-
| '?3: '?4 due to Assignment at Single(bb1[3]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0)
21+
| '?3: '?4 due to Assignment at Single(bb1[4]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0)
2222
|
2323
| Borrows
2424
| bw0: issued at bb1[0] in '?2
@@ -59,6 +59,7 @@ fn main() -> () {
5959
bb1: {
6060
_2 = &'?2 _1[_3];
6161
FakeRead(ForLet(None), _2);
62+
StorageDead(_3);
6263
StorageLive(_5);
6364
_5 = copy _2;
6465
FakeRead(ForLet(None), _5);
@@ -95,7 +96,6 @@ fn main() -> () {
9596
bb6: {
9697
StorageDead(_6);
9798
StorageDead(_5);
98-
StorageDead(_3);
9999
StorageDead(_2);
100100
StorageDead(_1);
101101
return;

0 commit comments

Comments
 (0)