| //@ 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() { () } |