aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2018-07-23 21:59:06 +0000
committerVedant Kumar <vsk@apple.com>2018-07-23 21:59:06 +0000
commit217be219024497894ca930fe6e7e64f532158621 (patch)
tree227766e7cc0398e55cffdac88a39fa1136f7fd6b
parent113fd07750c797025a93dfd128e45af39ed33549 (diff)
[utils] Fix the llvm::Optional data formatter
The llvm::Optional data formatter needs to look through the `Storage` container if it's present. Before: 220    if (Op && Op->getOp() != dwarf::DW_OP_LLVM_fragment) -> 221      HasComplexExpression = true;    222    223    // If the register can only be described by a complex expression (i.e.,    224    // multiple subregisters) it doesn't safely compose with another complex Target 0: (llc) stopped. (lldb) p Op (llvm::Optional<llvm::DIExpression::ExprOperand>) $0 = None After: (lldb) p Op (llvm::Optional<llvm::DIExpression::ExprOperand>) $0 = (llvm::DIExpression::ExprOperand) storage = { Op = 0x000000010603d460 } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337752 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/lldbDataFormatters.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/utils/lldbDataFormatters.py b/utils/lldbDataFormatters.py
index 687729f61ed..db1e22af792 100644
--- a/utils/lldbDataFormatters.py
+++ b/utils/lldbDataFormatters.py
@@ -91,8 +91,18 @@ class ArrayRefSynthProvider:
assert self.type_size != 0
def OptionalSummaryProvider(valobj, internal_dict):
- if not valobj.GetChildMemberWithName('hasVal').GetValueAsUnsigned(0):
+ storage = valobj.GetChildMemberWithName('Storage')
+ if not storage:
+ storage = valobj
+
+ failure = 2
+ hasVal = storage.GetChildMemberWithName('hasVal').GetValueAsUnsigned(failure)
+ if hasVal == failure:
+ return '<could not read llvm::Optional>'
+
+ if hasVal == 0:
return 'None'
- underlying_type = valobj.GetType().GetTemplateArgumentType(0)
- storage = valobj.GetChildMemberWithName('storage')
+
+ underlying_type = storage.GetType().GetTemplateArgumentType(0)
+ storage = storage.GetChildMemberWithName('storage')
return str(storage.Cast(underlying_type))