| //@ compile-flags:-g | |
| // FIXME(jieyouxu): triple check if this works in CI | |
| //@ min-cdb-version: 10.0.26100.2161 | |
| //@ ignore-backends: gcc | |
| // === GDB TESTS =================================================================================== | |
| //@ gdb-command: run | |
| //@ gdb-command: print _ref | |
| //@ gdb-check: $1 = (*mut ()) 0x[...] | |
| //@ gdb-command: print _ptr | |
| //@ gdb-check: $2 = (*mut ()) 0x[...] | |
| //@ gdb-command: print _local | |
| //@ gdb-check: $3 = () | |
| //@ gdb-command: print _field | |
| //@ gdb-check: $4 = unit_type::_TypeContainingUnitField {_a: 123, _unit: (), _b: 456} | |
| // Check that we can cast "void pointers" to their actual type in the debugger | |
| //@ gdb-command: print /x *(_ptr as *const u64) | |
| //@ gdb-check: $5 = 0x1122334455667788 | |
| // === CDB TESTS =================================================================================== | |
| //@ cdb-command: g | |
| //@ cdb-check: Breakpoint 0 hit | |
| //@ cdb-command: dx _ref | |
| //@ cdb-check: _ref : 0x[...] [Type: tuple$<> *] | |
| //@ cdb-command: dx _ptr | |
| //@ cdb-check: _ptr : 0x[...] [Type: tuple$<> *] | |
| //@ cdb-command: dx _local | |
| //@ cdb-check: _local [Type: tuple$<>] | |
| //@ cdb-command: dx _field,d | |
| //@ cdb-check: _field,d [Type: unit_type::_TypeContainingUnitField] | |
| //@ cdb-check: [+0x[...]] _a : 123 [Type: unsigned int] | |
| //@ cdb-check: [+0x[...]] _unit [Type: tuple$<>] | |
| //@ cdb-check: [+0x[...]] _b : 456 [Type: unsigned __int64] | |
| // Check that we can cast "void pointers" to their actual type in the debugger | |
| //@ cdb-command: dx ((__int64 *)_ptr),x | |
| //@ cdb-check: ((__int64 *)_ptr),x : 0x[...] : 0x1122334455667788 [Type: __int64 *] | |
| //@ cdb-check: 0x1122334455667788 [Type: __int64] | |
| struct _TypeContainingUnitField { | |
| _a: u32, | |
| _unit: (), | |
| _b: u64, | |
| } | |
| fn foo(_ref: &(), _ptr: *const ()) { | |
| let _local = (); | |
| let _field = _TypeContainingUnitField { _a: 123, _unit: (), _b: 456 }; | |
| zzz(); // #break | |
| } | |
| fn main() { | |
| let pointee = 0x1122_3344_5566_7788i64; | |
| foo(&(), &pointee as *const i64 as *const ()); | |
| } | |
| #[inline(never)] | |
| fn zzz() {} |