diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-04-25 19:40:53 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-04-25 19:40:53 +0000 |
commit | dd21502482a5ab56aa104f572320dff16cae990c (patch) | |
tree | 441b36d9d7c582fd7dd864c3377aac2730741876 /llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp | |
parent | 922b602683fe80e130a51d05b547cc6fb690b59d (diff) | |
download | bcm5719-llvm-dd21502482a5ab56aa104f572320dff16cae990c.tar.gz bcm5719-llvm-dd21502482a5ab56aa104f572320dff16cae990c.zip |
Fix an assertion when skipping stack values in DWARF2 mode.
The fix consists of resetting LocationKind when addMachineRegExpression fails.
rdar://problem/31803010
llvm-svn: 301351
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp index f4a6766b221..ccd326917bf 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp @@ -199,8 +199,10 @@ bool DwarfExpression::addMachineRegExpression(const TargetRegisterInfo &TRI, unsigned MachineReg, unsigned FragmentOffsetInBits) { auto Fragment = ExprCursor.getFragmentInfo(); - if (!addMachineReg(TRI, MachineReg, Fragment ? Fragment->SizeInBits : ~1U)) + if (!addMachineReg(TRI, MachineReg, Fragment ? Fragment->SizeInBits : ~1U)) { + LocationKind = Unknown; return false; + } bool HasComplexExpression = false; auto Op = ExprCursor.peek(); @@ -213,6 +215,7 @@ bool DwarfExpression::addMachineRegExpression(const TargetRegisterInfo &TRI, // operation to multiple DW_OP_pieces. if (HasComplexExpression && DwarfRegs.size() > 1) { DwarfRegs.clear(); + LocationKind = Unknown; return false; } @@ -234,6 +237,7 @@ bool DwarfExpression::addMachineRegExpression(const TargetRegisterInfo &TRI, return Op.getOp() == dwarf::DW_OP_stack_value; })) { DwarfRegs.clear(); + LocationKind = Unknown; return false; } |