diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-12-17 21:30:00 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-17 21:30:00 +0100 |
| commit | 39fe059a35f5faab8c1cfdf0ffacc5372355c090 (patch) | |
| tree | c0c4f54eaf7b69cba5e4e239b5508e9cc7349c61 /compiler/rustc_mir_transform/src | |
| parent | 677bb6cd609201554d617110492d079fae52a4c0 (diff) | |
| parent | 8022057ebbcc2a6a811d2c6ffbca4391ebfe0778 (diff) | |
| download | rust-39fe059a35f5faab8c1cfdf0ffacc5372355c090.tar.gz rust-39fe059a35f5faab8c1cfdf0ffacc5372355c090.zip | |
Rollup merge of #119052 - cjgillot:gvn-index-overflow, r=compiler-errors
Avoid overflow in GVN constant indexing. Fixes https://github.com/rust-lang/rust/issues/118992 Fixes https://github.com/rust-lang/rust/issues/119008
Diffstat (limited to 'compiler/rustc_mir_transform/src')
| -rw-r--r-- | compiler/rustc_mir_transform/src/gvn.rs | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/compiler/rustc_mir_transform/src/gvn.rs b/compiler/rustc_mir_transform/src/gvn.rs index b21988e179d..3b8adf7e86b 100644 --- a/compiler/rustc_mir_transform/src/gvn.rs +++ b/compiler/rustc_mir_transform/src/gvn.rs @@ -644,12 +644,10 @@ impl<'body, 'tcx> VnState<'body, 'tcx> { { if let Some(offset) = self.evaluated[idx].as_ref() && let Ok(offset) = self.ecx.read_target_usize(offset) + && let Some(min_length) = offset.checked_add(1) { - projection.to_mut()[i] = ProjectionElem::ConstantIndex { - offset, - min_length: offset + 1, - from_end: false, - }; + projection.to_mut()[i] = + ProjectionElem::ConstantIndex { offset, min_length, from_end: false }; } else if let Some(new_idx) = self.try_as_local(idx, location) { projection.to_mut()[i] = ProjectionElem::Index(new_idx); self.reused_locals.insert(new_idx); |
