[Lldb-commits] [PATCH] D51730: [DWARFExpression] Read literars as unsigned values.

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Sep 6 06:41:14 PDT 2018

JDevlieghere created this revision.
JDevlieghere added reviewers: aprantl, jingham, clayborg.
JDevlieghere added a project: LLDB.

After landing https://reviews.llvm.org/rL341457, we started seeing a failure on the swift-lldb bots. The change was correct and pretty straightforward, a `DW_OP_constu` was replaced with `DW_OP_lit23`, the value remaining identical.

  0x000000f4:         DW_TAG_variable
                        DW_AT_location    (0x00000000
                           [0x0000000100000a51,  0x0000000100000d47): DW_OP_lit23, DW_OP_stack_value)
                        DW_AT_name        ("number")

However, this broke LLDB:

  (Int) number = <extracting data from value failed>

The value was read correctly, but apparently the value's type was different. When reading a `constu` it was reading a uint64 (`m_type = e_ulonglong`) while for the literal, it got a signed int (`m_type = e_sint`). This change makes sure we read the value as an unsigned.




Index: source/Expression/DWARFExpression.cpp
--- source/Expression/DWARFExpression.cpp
+++ source/Expression/DWARFExpression.cpp
@@ -2382,7 +2382,7 @@
     case DW_OP_lit29:
     case DW_OP_lit30:
     case DW_OP_lit31:
-      stack.push_back(Scalar(op - DW_OP_lit0));
+      stack.push_back(Scalar((uint64_t(op - DW_OP_lit0)));

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51730.164203.patch
Type: text/x-patch
Size: 491 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180906/4de4a99a/attachment.bin>

More information about the lldb-commits mailing list