summaryrefslogtreecommitdiffstats
path: root/tests/ui/issues/issue-2470-bounds-check-overflow.rs
blob: f0e8e185e5633e69ecc28403700c7fad01b9fe2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// run-fail
// error-pattern:index out of bounds
// ignore-emscripten no processes

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]);
}