diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-04-16 15:50:32 +0900 |
|---|---|---|
| committer | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-05-06 14:02:55 +0900 |
| commit | e69748ba4f48efdc9a1dfcf8c16bc9aba39a86e3 (patch) | |
| tree | 33fc77d7a08037da5deeb878068f5af0284aa732 /src/test/ui/issues/issue-2470-bounds-check-overflow.rs | |
| parent | 43271a39adc26d29350d4830b594c6435472815e (diff) | |
| download | rust-e69748ba4f48efdc9a1dfcf8c16bc9aba39a86e3.tar.gz rust-e69748ba4f48efdc9a1dfcf8c16bc9aba39a86e3.zip | |
Move tests from `test/run-fail` to UI
Diffstat (limited to 'src/test/ui/issues/issue-2470-bounds-check-overflow.rs')
| -rw-r--r-- | src/test/ui/issues/issue-2470-bounds-check-overflow.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-2470-bounds-check-overflow.rs b/src/test/ui/issues/issue-2470-bounds-check-overflow.rs new file mode 100644 index 00000000000..86558c228c5 --- /dev/null +++ b/src/test/ui/issues/issue-2470-bounds-check-overflow.rs @@ -0,0 +1,26 @@ +// run-fail +// error-pattern:index out of bounds + +use std::mem; + +fn main() { + + // This should cause a bounds-check panic, but may not if we do our + // bounds checking by comparing the scaled index to the vector's + // address-bounds, since we've scaled the index to wrap around to the + // address of the 0th cell in the array (even though the index is + // huge). + + let x = vec![1_usize, 2_usize, 3_usize]; + + let base = x.as_ptr() as usize; + let idx = base / mem::size_of::<usize>(); + println!("ov1 base = 0x{:x}", base); + println!("ov1 idx = 0x{:x}", idx); + println!("ov1 sizeof::<usize>() = 0x{:x}", mem::size_of::<usize>()); + println!("ov1 idx * sizeof::<usize>() = 0x{:x}", + idx * mem::size_of::<usize>()); + + // This should panic. + println!("ov1 0x{:x}", x[idx]); +} |
