diff --git a/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp b/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp --- a/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp @@ -454,6 +454,9 @@ Stack.back().Kind = PrintedExpr::Value; break; } + case dwarf::DW_OP_nop: { + break; + } default: if (Opcode >= dwarf::DW_OP_reg0 && Opcode <= dwarf::DW_OP_reg31) { // DW_OP_reg: A register, with the register num implied by the @@ -487,7 +490,10 @@ ++I; } - assert(Stack.size() == 1 && "expected one value on stack"); + if (Stack.size() != 1) { + OS << ""; + return false; + } if (Stack.front().Kind == PrintedExpr::Address) OS << "[" << Stack.front().String << "]"; diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFExpressionCompactPrinterTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFExpressionCompactPrinterTest.cpp --- a/llvm/unittests/DebugInfo/DWARF/DWARFExpressionCompactPrinterTest.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DWARFExpressionCompactPrinterTest.cpp @@ -124,3 +124,11 @@ {DW_OP_entry_value, 0x02, DW_OP_breg13, 0x10, DW_OP_stack_value}, "entry([SP+16])"); } + +TEST_F(DWARFExpressionCompactPrinterTest, Test_OP_nop) { + TestExprPrinter({DW_OP_nop}, ""); +} + +TEST_F(DWARFExpressionCompactPrinterTest, Test_OP_nop_OP_reg) { + TestExprPrinter({DW_OP_nop, DW_OP_reg0}, "R0"); +}