about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/errors.rs
diff options
context:
space:
mode:
authorMatthew Maurer <mmaurer@google.com>2025-02-12 00:37:33 +0000
committerMatthew Maurer <mmaurer@google.com>2025-02-12 18:01:42 +0000
commitd82219a4fa06bfa47fc5aac64844c461905ae77d (patch)
tree3284087de39b5f13c0f65e75dbfadc20268597b6 /compiler/rustc_codegen_llvm/src/errors.rs
parent8c61cd4df8434573190336b8f16169f3c2b22a7a (diff)
downloadrust-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