Auto merge of #69241 - shahn:checked_add_revert, r=Mark-Simulacrum,lqd
Revert "Remove `checked_add` in `Layout::repeat`"
This fixes a a segfault in safe code, a stable regression. Reported in #69225.
This reverts commit a983e0590a.
This commit is contained in:
commit
a2fb0c28be
2 changed files with 38 additions and 5 deletions
|
|
@ -0,0 +1,31 @@
|
|||
// Ensure we appropriately error instead of overflowing a calculation when creating a new Alloc
|
||||
// Layout
|
||||
|
||||
// run-fail
|
||||
// compile-flags: -C opt-level=3
|
||||
// error-pattern: index out of bounds: the len is 0 but the index is 16777216
|
||||
// ignore-wasm no panic or subprocess support
|
||||
// ignore-emscripten no panic or subprocess support
|
||||
|
||||
fn do_test(x: usize) {
|
||||
let arr = vec![vec![0u8; 3]];
|
||||
|
||||
let mut z = Vec::new();
|
||||
for arr_ref in arr {
|
||||
for y in 0..x {
|
||||
for _ in 0..1 {
|
||||
z.extend(std::iter::repeat(0).take(x));
|
||||
let a = y * x;
|
||||
let b = (y + 1) * x - 1;
|
||||
let slice = &arr_ref[a..b];
|
||||
eprintln!("{} {} {} {}", a, b, arr_ref.len(), slice.len());
|
||||
eprintln!("{:?}", slice[1 << 24]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
do_test(1);
|
||||
do_test(2);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue