mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-30 14:52:56 +03:00
77 lines
1.9 KiB
Rust
77 lines
1.9 KiB
Rust
//@ compile-flags: -g
|
|
//@ disable-gdb-pretty-printers
|
|
//@ ignore-backends: gcc
|
|
|
|
// Tests that debuginfo is correctly generated for `unsafe<'a> T` binder types.
|
|
|
|
// === GDB TESTS ===================================================================================
|
|
|
|
//@ gdb-command:run
|
|
|
|
//@ gdb-command:whatis binder_i32
|
|
//@ gdb-check:type = unsafe &i32
|
|
|
|
//@ gdb-command:print unwrapped_i32
|
|
//@ gdb-check:$1 = 67
|
|
|
|
//@ gdb-command:whatis no_lifetime
|
|
//@ gdb-check:type = unsafe i32
|
|
|
|
//@ gdb-command:whatis unsafe_binder_tuple
|
|
//@ gdb-check:type = unsafe (&i32, &i32)
|
|
|
|
//@ gdb-command:whatis binder_tuple_ref
|
|
//@ gdb-check:type = (&i32, &i32)
|
|
|
|
//@ gdb-command:whatis binder.inner
|
|
//@ gdb-check:type = unsafe &i32
|
|
|
|
//@ gdb-command:print wrapper.val
|
|
//@ gdb-check:$2 = 99
|
|
|
|
//@ gdb-command:whatis binder_raw
|
|
//@ gdb-check:type = unsafe *const i32
|
|
|
|
//@ gdb-command:print binder_raw_val
|
|
//@ gdb-check:$3 = 7
|
|
|
|
#![feature(unsafe_binders)]
|
|
#[expect(incomplete_features)]
|
|
|
|
use std::unsafe_binder::{unwrap_binder, wrap_binder};
|
|
|
|
struct Wrapper {
|
|
val: i32,
|
|
}
|
|
|
|
struct Binder {
|
|
inner: unsafe<'a> &'a i32,
|
|
}
|
|
|
|
fn main() {
|
|
let x = 67i32;
|
|
let binder_i32: unsafe<'a> &'a i32 = unsafe { wrap_binder!(&x) };
|
|
let unwrapped_i32: i32 = unsafe { *unwrap_binder!(binder_i32) };
|
|
|
|
let y = 123i32;
|
|
let no_lifetime: unsafe<> i32 = unsafe { wrap_binder!(y) };
|
|
|
|
let unsafe_binder_tuple: unsafe<'a> (&'a i32, &'a i32) = unsafe {
|
|
wrap_binder!((&114i32, &514i32))
|
|
};
|
|
let binder_tuple_ref: (&i32, &i32) = unsafe { unwrap_binder!(unsafe_binder_tuple) };
|
|
|
|
let val = 99i32;
|
|
let binder = Binder { inner: unsafe { wrap_binder!(&val) } };
|
|
let wrapper = Wrapper { val: unsafe { *unwrap_binder!(binder.inner) } };
|
|
|
|
let z = 7i32;
|
|
let raw: *const i32 = &z;
|
|
let binder_raw: unsafe<'a> *const i32 = unsafe { wrap_binder!(raw) };
|
|
let binder_raw_val: i32 = unsafe { *unwrap_binder!(binder_raw) };
|
|
|
|
gugugaga(); // #break
|
|
}
|
|
|
|
fn gugugaga() { () }
|