diff --git a/lldb/include/lldb/Symbol/PostfixExpression.h b/lldb/include/lldb/Symbol/PostfixExpression.h index 2cf9dee6859c..e3a8587a5f84 100644 --- a/lldb/include/lldb/Symbol/PostfixExpression.h +++ b/lldb/include/lldb/Symbol/PostfixExpression.h @@ -87,14 +87,14 @@ public: /// A node representing an integer literal. class IntegerNode : public Node { public: - IntegerNode(uint32_t value) : Node(Integer), m_value(value) {} + IntegerNode(int64_t value) : Node(Integer), m_value(value) {} - uint32_t GetValue() const { return m_value; } + int64_t GetValue() const { return m_value; } static bool classof(const Node *node) { return node->GetKind() == Integer; } private: - uint32_t m_value; + int64_t m_value; }; /// A node representing the value of a register with the given register number. diff --git a/lldb/source/Symbol/PostfixExpression.cpp b/lldb/source/Symbol/PostfixExpression.cpp index 9b6108cd73df..148653561a4e 100644 --- a/lldb/source/Symbol/PostfixExpression.cpp +++ b/lldb/source/Symbol/PostfixExpression.cpp @@ -67,7 +67,7 @@ Node *postfix::Parse(llvm::StringRef expr, llvm::BumpPtrAllocator &alloc) { continue; } - uint32_t value; + int64_t value; if (to_integer(token, value, 10)) { // token is integer literal stack.push_back(MakeNode(alloc, value)); @@ -129,8 +129,8 @@ private: void Visit(InitialValueNode &val, Node *&) override; void Visit(IntegerNode &integer, Node *&) override { - m_out_stream.PutHex8(DW_OP_constu); - m_out_stream.PutULEB128(integer.GetValue()); + m_out_stream.PutHex8(DW_OP_consts); + m_out_stream.PutSLEB128(integer.GetValue()); ++m_stack_depth; } diff --git a/lldb/unittests/Symbol/PostfixExpressionTest.cpp b/lldb/unittests/Symbol/PostfixExpressionTest.cpp index b7fef83af7fc..59c818352c99 100644 --- a/lldb/unittests/Symbol/PostfixExpressionTest.cpp +++ b/lldb/unittests/Symbol/PostfixExpressionTest.cpp @@ -88,6 +88,7 @@ TEST(PostfixExpression, Parse) { EXPECT_EQ("^(^(int(1)))", ParseAndStringify("1 ^ ^")); EXPECT_EQ("^(+(int(1), ^(int(2))))", ParseAndStringify("1 2 ^ + ^")); EXPECT_EQ("-($foo, int(47))", ParseAndStringify("$foo 47 -")); + EXPECT_EQ("+(int(47), int(-42))", ParseAndStringify("47 -42 +")); EXPECT_EQ("nullptr", ParseAndStringify("+")); EXPECT_EQ("nullptr", ParseAndStringify("^")); @@ -137,7 +138,7 @@ static std::string ParseAndGenerateDWARF(llvm::StringRef expr) { } TEST(PostfixExpression, ToDWARF) { - EXPECT_EQ("DW_OP_constu 0x0", ParseAndGenerateDWARF("0")); + EXPECT_EQ("DW_OP_consts +0", ParseAndGenerateDWARF("0")); EXPECT_EQ("DW_OP_breg1 +0", ParseAndGenerateDWARF("R1")); @@ -151,18 +152,18 @@ TEST(PostfixExpression, ToDWARF) { EXPECT_EQ("DW_OP_breg1 +0, DW_OP_pick 0x01, DW_OP_plus ", ParseAndGenerateDWARF("R1 INIT +")); - EXPECT_EQ("DW_OP_constu 0x1, DW_OP_pick 0x01, DW_OP_deref , DW_OP_plus ", + EXPECT_EQ("DW_OP_consts +1, DW_OP_pick 0x01, DW_OP_deref , DW_OP_plus ", ParseAndGenerateDWARF("1 INIT ^ +")); - EXPECT_EQ("DW_OP_constu 0x4, DW_OP_constu 0x5, DW_OP_plus ", + EXPECT_EQ("DW_OP_consts +4, DW_OP_consts +5, DW_OP_plus ", ParseAndGenerateDWARF("4 5 +")); - EXPECT_EQ("DW_OP_constu 0x4, DW_OP_constu 0x5, DW_OP_minus ", + EXPECT_EQ("DW_OP_consts +4, DW_OP_consts +5, DW_OP_minus ", ParseAndGenerateDWARF("4 5 -")); - EXPECT_EQ("DW_OP_constu 0x4, DW_OP_deref ", ParseAndGenerateDWARF("4 ^")); + EXPECT_EQ("DW_OP_consts +4, DW_OP_deref ", ParseAndGenerateDWARF("4 ^")); - EXPECT_EQ("DW_OP_breg6 +0, DW_OP_constu 0x80, DW_OP_lit1 " + EXPECT_EQ("DW_OP_breg6 +0, DW_OP_consts +128, DW_OP_lit1 " ", DW_OP_minus , DW_OP_not , DW_OP_and ", ParseAndGenerateDWARF("R6 128 @")); } diff --git a/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp b/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp index 468d72d7df18..411889536f52 100644 --- a/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp +++ b/lldb/unittests/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpressionTests.cpp @@ -58,20 +58,20 @@ TEST(PDBFPOProgramToDWARFExpressionTests, SingleAssignmentRegisterRef) { } TEST(PDBFPOProgramToDWARFExpressionTests, MultipleIndependentAssignments) { - CheckValidProgramTranslation("$T1 1 = $T0 0 =", "$T0", "DW_OP_constu 0x0"); + CheckValidProgramTranslation("$T1 1 = $T0 0 =", "$T0", "DW_OP_consts +0"); } TEST(PDBFPOProgramToDWARFExpressionTests, MultipleDependentAssignments) { CheckValidProgramTranslation( "$T1 $ebp 4 + = $T0 $T1 8 - 128 @ = ", "$T0", - "DW_OP_breg6 +0, DW_OP_constu 0x4, DW_OP_plus , DW_OP_constu 0x8, " - "DW_OP_minus , DW_OP_constu 0x80, DW_OP_lit1 , DW_OP_minus , DW_OP_not , " + "DW_OP_breg6 +0, DW_OP_consts +4, DW_OP_plus , DW_OP_consts +8, " + "DW_OP_minus , DW_OP_consts +128, DW_OP_lit1 , DW_OP_minus , DW_OP_not , " "DW_OP_and "); } TEST(PDBFPOProgramToDWARFExpressionTests, DependencyChain) { CheckValidProgramTranslation("$T1 0 = $T0 $T1 = $ebp $T0 =", "$ebp", - "DW_OP_constu 0x0"); + "DW_OP_consts +0"); } /// Invalid programs tests