Skip to content

Commit b2815f5

Browse files
authored
[Eval] Dereference bundled member field of a class/struct (#21)
1 parent 7472bd5 commit b2815f5

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

lldb/source/ValueObject/DILEval.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,8 @@ void DILInterpreter::Visit(const MemberOfNode* node) {
884884

885885
if (node->valobj()) {
886886
m_result = node->valobj()->GetSP();
887+
if (m_result->GetCompilerType().IsReferenceType())
888+
m_result = m_result->Dereference(error);
887889
} else {
888890
if (base->GetCompilerType().IsReferenceType())
889891
base = base->Dereference(error);

lldb/unittests/DIL/DILTests.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -986,16 +986,16 @@ TEST_F(EvalTest, TestLocalVariables) {
986986

987987
TEST_F(EvalTest, TestMemberOf) {
988988
EXPECT_THAT(Eval("s.x"), IsEqual("1"));
989-
EXPECT_THAT(Eval("s.r"), XFail(IsEqual("2")));
989+
EXPECT_THAT(Eval("s.r"), IsEqual("2"));
990990
EXPECT_THAT(Eval("s.r + 1"), IsEqual("3"));
991991
EXPECT_THAT(Eval("sr.x"), IsEqual("1"));
992-
EXPECT_THAT(Eval("sr.r"), XFail(IsEqual("2")));
992+
EXPECT_THAT(Eval("sr.r"), IsEqual("2"));
993993
EXPECT_THAT(Eval("sr.r + 1"), IsEqual("3"));
994994
EXPECT_THAT(Eval("sp->x"), IsEqual("1"));
995-
EXPECT_THAT(Eval("sp->r"), XFail(IsEqual("2")));
995+
EXPECT_THAT(Eval("sp->r"), IsEqual("2"));
996996
EXPECT_THAT(Eval("sp->r + 1"), IsEqual("3"));
997997
EXPECT_THAT(Eval("sarr->x"), IsEqual("5"));
998-
EXPECT_THAT(Eval("sarr->r"), XFail(IsEqual("2")));
998+
EXPECT_THAT(Eval("sarr->r"), IsEqual("2"));
999999
EXPECT_THAT(Eval("sarr->r + 1"), IsEqual("3"));
10001000
EXPECT_THAT(Eval("(sarr + 1)->x"), IsEqual("1"));
10011001

0 commit comments

Comments
 (0)