about summary refs log tree commit diff
path: root/src/tools/miri/tests/fail/shims/backtrace/bad-backtrace-resolve-flags.rs
blob: 31e3915f3d64fa478597aa04c2459a7596ebbe9e (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
#[repr(C)]
struct MiriFrame {
    name_len: usize,
    filename_len: usize,
    lineno: u32,
    colno: u32,
    fn_ptr: *mut (),
}

extern "Rust" {
    fn miri_backtrace_size(flags: u64) -> usize;
    fn miri_get_backtrace(flags: u64, buf: *mut *mut ());
    fn miri_resolve_frame(ptr: *mut (), flags: u64) -> MiriFrame;
}

fn main() {
    unsafe {
        let mut buf = vec![std::ptr::null_mut(); miri_backtrace_size(0)];

        miri_get_backtrace(1, buf.as_mut_ptr());

        // miri_resolve_frame will error from an invalid backtrace before it will from invalid flags
        miri_resolve_frame(buf[0], 2); //~ ERROR:  unsupported operation: unknown `miri_resolve_frame` flags 2
    }
}