diff --git a/lldb/source/ValueObject/DILEval.cpp b/lldb/source/ValueObject/DILEval.cpp index d34877d38902..ea14c46d5d3e 100644 --- a/lldb/source/ValueObject/DILEval.cpp +++ b/lldb/source/ValueObject/DILEval.cpp @@ -884,6 +884,8 @@ void DILInterpreter::Visit(const MemberOfNode* node) { if (node->valobj()) { m_result = node->valobj()->GetSP(); + if (m_result->GetCompilerType().IsReferenceType()) + m_result = m_result->Dereference(error); } else { if (base->GetCompilerType().IsReferenceType()) base = base->Dereference(error); diff --git a/lldb/unittests/DIL/DILTests.cpp b/lldb/unittests/DIL/DILTests.cpp index 4675b892b0b2..3cc3cf72863e 100644 --- a/lldb/unittests/DIL/DILTests.cpp +++ b/lldb/unittests/DIL/DILTests.cpp @@ -986,16 +986,16 @@ TEST_F(EvalTest, TestLocalVariables) { TEST_F(EvalTest, TestMemberOf) { EXPECT_THAT(Eval("s.x"), IsEqual("1")); - EXPECT_THAT(Eval("s.r"), XFail(IsEqual("2"))); + EXPECT_THAT(Eval("s.r"), IsEqual("2")); EXPECT_THAT(Eval("s.r + 1"), IsEqual("3")); EXPECT_THAT(Eval("sr.x"), IsEqual("1")); - EXPECT_THAT(Eval("sr.r"), XFail(IsEqual("2"))); + EXPECT_THAT(Eval("sr.r"), IsEqual("2")); EXPECT_THAT(Eval("sr.r + 1"), IsEqual("3")); EXPECT_THAT(Eval("sp->x"), IsEqual("1")); - EXPECT_THAT(Eval("sp->r"), XFail(IsEqual("2"))); + EXPECT_THAT(Eval("sp->r"), IsEqual("2")); EXPECT_THAT(Eval("sp->r + 1"), IsEqual("3")); EXPECT_THAT(Eval("sarr->x"), IsEqual("5")); - EXPECT_THAT(Eval("sarr->r"), XFail(IsEqual("2"))); + EXPECT_THAT(Eval("sarr->r"), IsEqual("2")); EXPECT_THAT(Eval("sarr->r + 1"), IsEqual("3")); EXPECT_THAT(Eval("(sarr + 1)->x"), IsEqual("1"));