[Lldb-commits] [lldb] 9548dbe - [lldb][test] Add TestNoUniqueAddress.py

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Mon Sep 16 04:06:22 PDT 2024


Author: Michael Buch
Date: 2024-09-16T12:05:00+01:00
New Revision: 9548dbedbc1b2bfb130c91df54e8007acb81e1b0

URL: https://github.com/llvm/llvm-project/commit/9548dbedbc1b2bfb130c91df54e8007acb81e1b0
DIFF: https://github.com/llvm/llvm-project/commit/9548dbedbc1b2bfb130c91df54e8007acb81e1b0.diff

LOG: [lldb][test] Add TestNoUniqueAddress.py

Tests that run expressions on record types with
`[[no_unique_address]]` fields.

Added: 
    lldb/test/API/lang/cpp/no_unique_address/Makefile
    lldb/test/API/lang/cpp/no_unique_address/TestNoUniqueAddress.py
    lldb/test/API/lang/cpp/no_unique_address/main.cpp

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/lang/cpp/no_unique_address/Makefile b/lldb/test/API/lang/cpp/no_unique_address/Makefile
new file mode 100644
index 00000000000000..99998b20bcb050
--- /dev/null
+++ b/lldb/test/API/lang/cpp/no_unique_address/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules

diff  --git a/lldb/test/API/lang/cpp/no_unique_address/TestNoUniqueAddress.py b/lldb/test/API/lang/cpp/no_unique_address/TestNoUniqueAddress.py
new file mode 100644
index 00000000000000..d16aaa14153fd7
--- /dev/null
+++ b/lldb/test/API/lang/cpp/no_unique_address/TestNoUniqueAddress.py
@@ -0,0 +1,67 @@
+"""
+Test that LLDB correctly handles fields
+marked with [[no_unique_address]].
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class NoUniqueAddressTestCase(TestBase):
+    def test(self):
+        self.build()
+        lldbutil.run_to_source_breakpoint(
+            self, "return 0", lldb.SBFileSpec("main.cpp", False)
+        )
+
+        # Qualified/unqualified lookup to templates in namespace
+        self.expect_expr(
+            "b1",
+            result_type="basic::Foo",
+            result_children=[ValueCheck(name="a", type="Empty")],
+        )
+
+        self.expect_expr(
+            "b2",
+            result_type="bases::Foo",
+            result_children=[
+                ValueCheck(
+                    type="bases::B", children=[ValueCheck(name="x", type="Empty")]
+                ),
+                ValueCheck(
+                    type="bases::A",
+                    children=[
+                        ValueCheck(name="c", type="long", value="1"),
+                        ValueCheck(name="d", type="long", value="2"),
+                    ],
+                ),
+                ValueCheck(
+                    type="bases::C", children=[ValueCheck(name="x", type="Empty")]
+                ),
+            ],
+        )
+        self.expect_expr(
+            "b3",
+            result_type="bases::Bar",
+            result_children=[
+                ValueCheck(
+                    type="bases::B", children=[ValueCheck(name="x", type="Empty")]
+                ),
+                ValueCheck(
+                    type="bases::C", children=[ValueCheck(name="x", type="Empty")]
+                ),
+                ValueCheck(
+                    type="bases::A",
+                    children=[
+                        ValueCheck(name="c", type="long", value="5"),
+                        ValueCheck(name="d", type="long", value="6"),
+                    ],
+                ),
+            ],
+        )
+
+        self.expect("frame var b1")
+        self.expect("frame var b2")
+        self.expect("frame var b3")

diff  --git a/lldb/test/API/lang/cpp/no_unique_address/main.cpp b/lldb/test/API/lang/cpp/no_unique_address/main.cpp
new file mode 100644
index 00000000000000..424fa90859ceaa
--- /dev/null
+++ b/lldb/test/API/lang/cpp/no_unique_address/main.cpp
@@ -0,0 +1,35 @@
+struct Empty {};
+
+namespace basic {
+struct Foo {
+  [[no_unique_address]] Empty a;
+};
+} // namespace basic
+
+namespace bases {
+struct A {
+  long c, d;
+};
+
+struct B {
+  [[no_unique_address]] Empty x;
+};
+
+struct C {
+  [[no_unique_address]] Empty x;
+};
+
+struct Foo : B, A, C {};
+struct Bar : B, C, A {};
+} // namespace bases
+
+int main() {
+  basic::Foo b1;
+  bases::Foo b2;
+  bases::Bar b3;
+  b2.c = 1;
+  b2.d = 2;
+  b3.c = 5;
+  b3.d = 6;
+  return 0;
+}


        


More information about the lldb-commits mailing list