diff options
| author | Matthew Maurer <mmaurer@google.com> | 2025-02-12 00:37:33 +0000 |
|---|---|---|
| committer | Matthew Maurer <mmaurer@google.com> | 2025-02-12 18:01:42 +0000 |
| commit | d82219a4fa06bfa47fc5aac64844c461905ae77d (patch) | |
| tree | 3284087de39b5f13c0f65e75dbfadc20268597b6 /compiler/rustc_codegen_llvm/src/errors.rs | |
| parent | 8c61cd4df8434573190336b8f16169f3c2b22a7a (diff) | |
| download | rust-d82219a4fa06bfa47fc5aac64844c461905ae77d.tar.gz rust-d82219a4fa06bfa47fc5aac64844c461905ae77d.zip | |
debuginfo: Set bitwidth appropriately in enum variant tags
Previously, we unconditionally set the bitwidth to 128-bits, the largest an discrimnator would possibly be. Then, LLVM would cut down the constant by chopping off leading zeroes before emitting the DWARF. LLVM only supported 64-bit descriminators, so this would also have occasionally resulted in truncated data (or an assert) if more than 64-bits were used. LLVM added support for 128-bit enumerators in llvm/llvm-project#125578 That patchset also trusts the constant to describe how wide the variant tag is. As a result, we went from emitting tags that looked like: DW_AT_discr_value (0xfe) (`form1`) to emitting tags that looked like: DW_AT_discr_value (<0x10> fe ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 ) This makes the `DW_AT_discr_value` encode at the bitwidth of the tag, which: 1. Is probably closer to our intentions in terms of describing the data. 2. Doesn't invoke the 128-bit support which may not be supported by all debuggers / downstream tools. 3. Will result in smaller debug information.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/errors.rs')
0 files changed, 0 insertions, 0 deletions
