[llvm] r337752 - [utils] Fix the llvm::Optional data formatter
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 23 14:59:06 PDT 2018
Author: vedantk
Date: Mon Jul 23 14:59:06 2018
New Revision: 337752
URL: http://llvm.org/viewvc/llvm-project?rev=337752&view=rev
Log:
[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
}
Modified:
llvm/trunk/utils/lldbDataFormatters.py
Modified: llvm/trunk/utils/lldbDataFormatters.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lldbDataFormatters.py?rev=337752&r1=337751&r2=337752&view=diff
==============================================================================
--- llvm/trunk/utils/lldbDataFormatters.py (original)
+++ llvm/trunk/utils/lldbDataFormatters.py Mon Jul 23 14:59:06 2018
@@ -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))
More information about the llvm-commits
mailing list