https://github.com/sedymrak updated 
https://github.com/llvm/llvm-project/pull/171521

From 13c06e2b4100ba8999d11ec0d2dc0c0038b6d402 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]>
Date: Tue, 9 Dec 2025 23:12:51 +0100
Subject: [PATCH 1/3] [lldb] add a test that demonstrates the problem with the
 "ValueObject::GetExpressionPath" method

---
 .../python_api/value/get_expr_path/Makefile   |  3 ++
 .../TestValueAPIGetExpressionPath.py          | 50 +++++++++++++++++++
 .../API/python_api/value/get_expr_path/main.c |  5 ++
 3 files changed, 58 insertions(+)
 create mode 100644 lldb/test/API/python_api/value/get_expr_path/Makefile
 create mode 100644 
lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
 create mode 100644 lldb/test/API/python_api/value/get_expr_path/main.c

diff --git a/lldb/test/API/python_api/value/get_expr_path/Makefile 
b/lldb/test/API/python_api/value/get_expr_path/Makefile
new file mode 100644
index 0000000000000..10495940055b6
--- /dev/null
+++ b/lldb/test/API/python_api/value/get_expr_path/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules
diff --git 
a/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py 
b/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
new file mode 100644
index 0000000000000..227588c412587
--- /dev/null
+++ 
b/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
@@ -0,0 +1,50 @@
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class ValueAPIGetExpressionPath(TestBase):
+    def test(self):
+        self.build()
+
+        _, _, thread, _ = lldbutil.run_to_source_breakpoint(
+            self, "Break at this line", lldb.SBFileSpec("main.c")
+        )
+        frame = thread.GetFrameAtIndex(0)
+
+        self.assertEqual(frame.FindVariable("foo").get_expr_path(), "foo")
+        for i in range(2):
+            self.assertEqual(
+                frame.FindVariable("foo").GetChildAtIndex(i).get_expr_path(),
+                f"foo[{i}]",
+            )
+            for j in range(3):
+                self.assertEqual(
+                    frame.FindVariable("foo")
+                    .GetChildAtIndex(i)
+                    .GetChildAtIndex(j)
+                    .get_expr_path(),
+                    f"foo[{i}][{j}]",
+                )
+                for k in range(4):
+                    self.assertEqual(
+                        frame.FindVariable("foo")
+                        .GetChildAtIndex(i)
+                        .GetChildAtIndex(j)
+                        .GetChildAtIndex(k)
+                        .get_expr_path(),
+                        f"foo[{i}][{j}][{k}]",
+                    )
+        self.assertEqual(frame.FindVariable("bar").get_expr_path(), "bar")
+        for j in range(3):
+            self.assertEqual(
+                frame.FindVariable("bar").GetChildAtIndex(j).get_expr_path(), 
f"(*bar)[{j}]"
+            )
+            for k in range(4):
+                self.assertEqual(
+                    frame.FindVariable("bar")
+                    .GetChildAtIndex(j)
+                    .GetChildAtIndex(k)
+                    .get_expr_path(),
+                    f"(*bar)[{j}][{k}]",
+                )
diff --git a/lldb/test/API/python_api/value/get_expr_path/main.c 
b/lldb/test/API/python_api/value/get_expr_path/main.c
new file mode 100644
index 0000000000000..f6fcb11e36835
--- /dev/null
+++ b/lldb/test/API/python_api/value/get_expr_path/main.c
@@ -0,0 +1,5 @@
+int main() {
+  int foo[2][3][4];
+  int (*bar)[3][4] = foo;
+  return 0; // Break at this line
+}

From 3b3c3048172d095246efd11bd11ad1b4dc2ce6ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]>
Date: Tue, 9 Dec 2025 16:35:49 +0100
Subject: [PATCH 2/3] [lldb] fix the "ValueObject::GetExpressionPath" method

---
 lldb/source/ValueObject/ValueObject.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lldb/source/ValueObject/ValueObject.cpp 
b/lldb/source/ValueObject/ValueObject.cpp
index aeea32f19ee2c..3bbb917e51976 100644
--- a/lldb/source/ValueObject/ValueObject.cpp
+++ b/lldb/source/ValueObject/ValueObject.cpp
@@ -2138,6 +2138,20 @@ void ValueObject::GetExpressionPath(Stream &s,
 
   ValueObject *parent = GetParent();
 
+  if (parent) {
+    lldb_private::CompilerType parentType = parent->GetCompilerType();
+    const bool parentTypeIsPointer = parentType.IsPointerType();
+    const bool pointeeOfParentTypeIsArray =
+        parentType.GetPointeeType().IsArrayType(nullptr, nullptr, nullptr);
+    if (parentTypeIsPointer && pointeeOfParentTypeIsArray) {
+      s.PutCString("(*");
+      parent->GetExpressionPath(s, epformat);
+      s.PutCString(")");
+      s.PutCString(GetName().GetCString());
+      return;
+    }
+  }
+
   if (parent)
     parent->GetExpressionPath(s, epformat);
 

From e9b6b21de1a948a46ca038c97e9e407be5887266 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]>
Date: Tue, 9 Dec 2025 23:54:28 +0100
Subject: [PATCH 3/3] formatting

---
 .../value/get_expr_path/TestValueAPIGetExpressionPath.py       | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git 
a/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py 
b/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
index 227588c412587..a2de8df9cc170 100644
--- 
a/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
+++ 
b/lldb/test/API/python_api/value/get_expr_path/TestValueAPIGetExpressionPath.py
@@ -38,7 +38,8 @@ def test(self):
         self.assertEqual(frame.FindVariable("bar").get_expr_path(), "bar")
         for j in range(3):
             self.assertEqual(
-                frame.FindVariable("bar").GetChildAtIndex(j).get_expr_path(), 
f"(*bar)[{j}]"
+                frame.FindVariable("bar").GetChildAtIndex(j).get_expr_path(),
+                f"(*bar)[{j}]",
             )
             for k in range(4):
                 self.assertEqual(

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to