diff options
| author | bors <bors@rust-lang.org> | 2022-04-23 07:12:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-04-23 07:12:52 +0000 |
| commit | 09064a21b05df8a5f92d34622c467bd037a923fd (patch) | |
| tree | 754f9126ab09f697df6fb8026c46822551caded0 /compiler/rustc_codegen_llvm/src/asm.rs | |
| parent | 64c5deb0e3a22b93ed1fe5e2a7f2e8d91eea63b9 (diff) | |
| parent | 8b230086fa4b22c647129a8c84fa0bdfc6d82a0d (diff) | |
| download | rust-09064a21b05df8a5f92d34622c467bd037a923fd.tar.gz rust-09064a21b05df8a5f92d34622c467bd037a923fd.zip | |
Auto merge of #96316 - michaelwoerister:debuginfo-fix-unit-msvc, r=wesleywiser
debuginfo: Emit ZST struct debuginfo for unit type when CPP-like debuginfo is enabled
As already discovered in https://github.com/rust-lang/rust/commit/24a728a8eb4832568509eb757c2374934a76cb98, PDB does not play well with custom basic types. This PR extends to the fix to `()`: Instead of a custom basic type, we treat it like an empty tuple (i.e. it is described as a struct which happens to have no fields).
Before this change anything with a `()` in it would cause trouble, which is especially bad for `*const ()` and `*mut ()` which are often used for opaque pointers. E.g. the test case added in this PR would look like:
```
0:000> dx _ref
Error: Unable to bind name '_ref'
0:000> dx _ptr
Error: Unable to bind name '_ptr'
0:000> dx _local
Error: Unable to bind name '_local'
0:000> dx _field,d
_field,d [Type: unit_type::_TypeContainingUnitField]
[+0x008] _a : 123 [Type: unsigned int]
[+0x000] _unit : Unexpected failure to dereference object
[+0x000] _b : 456 [Type: unsigned __int64]
0:000> dx ((__int64 *)_ptr),x
Error: Unable to bind name '_ptr'
```
With the PR it produces the expected output:
```
0:000> dx _ref
_ref : 0x7ff6f2012230 : () [Type: tuple$<> *]
0:000> dx _ptr
_ptr : 0x7e8ddffc20 : () [Type: tuple$<> *]
0:000> dx _local
_local : () [Type: tuple$<>]
0:000> dx _field,d
_field,d [Type: unit_type::_TypeContainingUnitField]
[+0x008] _a : 123 [Type: unsigned int]
[+0x000] _unit : () [Type: tuple$<>]
[+0x000] _b : 456 [Type: unsigned __int64]
0:000> dx ((__int64 *)_ptr),x
((__int64 *)_ptr),x : 0x7e8ddffc20 : 0x1122334455667788 [Type: __int64 *]
```
r? `@wesleywiser`
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/asm.rs')
0 files changed, 0 insertions, 0 deletions
