diff options
author | Vedant Kumar <vsk@apple.com> | 2018-07-23 21:59:06 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2018-07-23 21:59:06 +0000 |
commit | 217be219024497894ca930fe6e7e64f532158621 (patch) | |
tree | 227766e7cc0398e55cffdac88a39fa1136f7fd6b | |
parent | 113fd07750c797025a93dfd128e45af39ed33549 (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.py | 16 |
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)) |