[clang] [llvm] [DebugInfo] Use DW_op_bit_piece for structured bindings of bitfields (PR #85665)
Adrian Prantl via cfe-commits
cfe-commits at lists.llvm.org
Wed May 15 09:01:55 PDT 2024
================
@@ -6178,10 +6178,16 @@ The current supported opcode vocabulary is limited:
the last entry from the second last entry and appends the result to the
expression stack.
- ``DW_OP_plus_uconst, 93`` adds ``93`` to the working expression.
-- ``DW_OP_LLVM_fragment, 16, 8`` specifies the offset and size (``16`` and ``8``
- here, respectively) of the variable fragment from the working expression. Note
- that contrary to DW_OP_bit_piece, the offset is describing the location
- within the described source variable.
+- ``DW_OP_LLVM_fragment, 16, 8`` specifies that the top of the expression stack
+ is a fragment of the source language variable with the given offset and size
+ (``16`` and ``8`` here, respectively). Note that the offset and size are the
+ opposite way around to ``DW_OP_bit_piece``, and the offset is within the
+ source language variable.
+- ``DW_OP_bit_piece, 8, 16`` specifies that the source language variable can be
+ found in the sequence of bits at the given size and offset (``8`` and ``16``
+ here, respectively) within the top of the expression stack. Note that the
+ offset and size are the opposite way around to ``DW_OP_LLVM_fragment``, and the
+ offset is within the LLVM variable (if that's at the top of the stack).
----------------
adrian-prantl wrote:
> DW_OP_bit_piece is like every other standard dwarf expression
Not it's not. It's a composite location description delimiter and cannot appear inside a DWARF expression. (See DWARF 5 section 2.6.1.2). That's why it's important that all LLVM algorithms that need to reason about fragments (the LLVM equivalent of composite location descriptions) are aware of them.
https://github.com/llvm/llvm-project/pull/85665
More information about the cfe-commits
mailing list