mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-15 07:18:33 +00:00
[DebugInfo] printCompactDWARFExpr: don't assert on stack size
Gracefully handle non-1 stack sizes in printCompactDWARFExpr rather than assert. Add support for DW_OP_nop and test the zero-sized stack case. This is intended to be nearly NFC. Differential Revision: https://reviews.llvm.org/D147269
This commit is contained in:
parent
a4fb7f60e2
commit
7f596bb509
@ -454,6 +454,9 @@ static bool printCompactDWARFExpr(
|
||||
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<N>: A register, with the register num implied by the
|
||||
@ -487,7 +490,10 @@ static bool printCompactDWARFExpr(
|
||||
++I;
|
||||
}
|
||||
|
||||
assert(Stack.size() == 1 && "expected one value on stack");
|
||||
if (Stack.size() != 1) {
|
||||
OS << "<stack of size " << Stack.size() << ", expected 1>";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Stack.front().Kind == PrintedExpr::Address)
|
||||
OS << "[" << Stack.front().String << "]";
|
||||
|
@ -124,3 +124,11 @@ TEST_F(DWARFExpressionCompactPrinterTest, Test_OP_entry_value_mem) {
|
||||
{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}, "<stack of size 0, expected 1>");
|
||||
}
|
||||
|
||||
TEST_F(DWARFExpressionCompactPrinterTest, Test_OP_nop_OP_reg) {
|
||||
TestExprPrinter({DW_OP_nop, DW_OP_reg0}, "R0");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user