kastiglione created this revision. kastiglione added a reviewer: jingham. Herald added a project: All. kastiglione requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Adjust the placement of parentheses around a pointer dereference in `GetExpressionPath`. The comment states: > `*(a_ptr).memberName`, which is entirely fine but the expression should be: `(*a_ptr).memberName`. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D134011 Files: lldb/source/Core/ValueObject.cpp lldb/test/API/python_api/exprpath_synthetic/main.mm Index: lldb/test/API/python_api/exprpath_synthetic/main.mm =================================================================== --- lldb/test/API/python_api/exprpath_synthetic/main.mm +++ lldb/test/API/python_api/exprpath_synthetic/main.mm @@ -5,8 +5,11 @@ { std::vector<int> v{1,2,3,4,5}; NSArray *a = @[@"Hello",@"World",@"From Me"]; + int *p; return 0; //% v = self.frame().FindVariable("v"); v0 = v.GetChildAtIndex(0); s = lldb.SBStream(); v0.GetExpressionPath(s); //% self.runCmd("expr %s = 12" % s.GetData()); self.assertTrue(v0.GetValueAsUnsigned() == 12, "value change via expr failed") //% a = self.frame().FindVariable("a"); a1 = a.GetChildAtIndex(1); s = lldb.SBStream(); a1.GetExpressionPath(s); //% self.expect("po %s" % s.GetData(), substrs = ["World"]) + //% p = self.frame().GetValueForVariablePath("*p") + //% self.assertEqual(p.path, "(*p)") } Index: lldb/source/Core/ValueObject.cpp =================================================================== --- lldb/source/Core/ValueObject.cpp +++ lldb/source/Core/ValueObject.cpp @@ -1929,11 +1929,11 @@ if (is_deref_of_parent && epformat == eGetExpressionPathFormatDereferencePointers) { // this is the original format of GetExpressionPath() producing code like - // *(a_ptr).memberName, which is entirely fine, until you put this into + // (*a_ptr).memberName, which is entirely fine, until you put this into // StackFrame::GetValueForVariableExpressionPath() which prefers to see // a_ptr->memberName. the eHonorPointers mode is meant to produce strings // in this latter format - s.PutCString("*("); + s.PutCString("(*"); } ValueObject *parent = GetParent();
Index: lldb/test/API/python_api/exprpath_synthetic/main.mm =================================================================== --- lldb/test/API/python_api/exprpath_synthetic/main.mm +++ lldb/test/API/python_api/exprpath_synthetic/main.mm @@ -5,8 +5,11 @@ { std::vector<int> v{1,2,3,4,5}; NSArray *a = @[@"Hello",@"World",@"From Me"]; + int *p; return 0; //% v = self.frame().FindVariable("v"); v0 = v.GetChildAtIndex(0); s = lldb.SBStream(); v0.GetExpressionPath(s); //% self.runCmd("expr %s = 12" % s.GetData()); self.assertTrue(v0.GetValueAsUnsigned() == 12, "value change via expr failed") //% a = self.frame().FindVariable("a"); a1 = a.GetChildAtIndex(1); s = lldb.SBStream(); a1.GetExpressionPath(s); //% self.expect("po %s" % s.GetData(), substrs = ["World"]) + //% p = self.frame().GetValueForVariablePath("*p") + //% self.assertEqual(p.path, "(*p)") } Index: lldb/source/Core/ValueObject.cpp =================================================================== --- lldb/source/Core/ValueObject.cpp +++ lldb/source/Core/ValueObject.cpp @@ -1929,11 +1929,11 @@ if (is_deref_of_parent && epformat == eGetExpressionPathFormatDereferencePointers) { // this is the original format of GetExpressionPath() producing code like - // *(a_ptr).memberName, which is entirely fine, until you put this into + // (*a_ptr).memberName, which is entirely fine, until you put this into // StackFrame::GetValueForVariableExpressionPath() which prefers to see // a_ptr->memberName. the eHonorPointers mode is meant to produce strings // in this latter format - s.PutCString("*("); + s.PutCString("(*"); } ValueObject *parent = GetParent();
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits