[Lldb-commits] [lldb] 9e0a39f - [lldb] Add a test for class loading via member typedefs

Raphael Isemann via lldb-commits lldb-commits at lists.llvm.org
Mon Nov 1 07:59:09 PDT 2021


Author: Raphael Isemann
Date: 2021-11-01T15:58:45+01:00
New Revision: 9e0a39f3787ac055631891be9062dcd561cf4501

URL: https://github.com/llvm/llvm-project/commit/9e0a39f3787ac055631891be9062dcd561cf4501
DIFF: https://github.com/llvm/llvm-project/commit/9e0a39f3787ac055631891be9062dcd561cf4501.diff

LOG: [lldb] Add a test for class loading via member typedefs

This is currently only tested indirectly in the huge stdlibc++ formatter tests.

Added: 
    lldb/test/API/lang/cpp/class-loading-via-member-typedef/Makefile
    lldb/test/API/lang/cpp/class-loading-via-member-typedef/TestClassLoadingViaMemberTypedef.py
    lldb/test/API/lang/cpp/class-loading-via-member-typedef/main.cpp

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/lang/cpp/class-loading-via-member-typedef/Makefile b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/Makefile
new file mode 100644
index 0000000000000..99998b20bcb05
--- /dev/null
+++ b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules

diff  --git a/lldb/test/API/lang/cpp/class-loading-via-member-typedef/TestClassLoadingViaMemberTypedef.py b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/TestClassLoadingViaMemberTypedef.py
new file mode 100644
index 0000000000000..6d1a85fff7214
--- /dev/null
+++ b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/TestClassLoadingViaMemberTypedef.py
@@ -0,0 +1,41 @@
+"""
+Tests loading of classes when the loading is triggered via a typedef inside the
+class (and not via the normal LLDB lookup that first resolves the surrounding
+class).
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @no_debug_info_test
+    def test(self):
+        self.build()
+        self.createTestTarget()
+
+        # Print the top-level typedef which triggers the loading of the class
+        # that the typedef is defined inside.
+        self.expect_expr(
+            "pull_in_classes",
+            result_type="StructWithMember::MemberTypedef",
+            result_value="0",
+        )
+
+        # Print the classes and check their types.
+        self.expect_expr(
+            "struct_to_print",
+            result_type="StructWithMember",
+            result_children=[
+                ValueCheck(
+                    name="m",
+                    type="StructWithNested::Nested<int>::OtherTypedef",
+                    children=[ValueCheck(name="i", value="0", type="int")],
+                )
+            ],
+        )

diff  --git a/lldb/test/API/lang/cpp/class-loading-via-member-typedef/main.cpp b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/main.cpp
new file mode 100644
index 0000000000000..ba08d3bcbfd59
--- /dev/null
+++ b/lldb/test/API/lang/cpp/class-loading-via-member-typedef/main.cpp
@@ -0,0 +1,31 @@
+struct TopLevelStruct {
+  int i;
+};
+
+// Contains a templated nested class with a typedef.
+struct StructWithNested {
+  template <typename T>
+  struct Nested {
+    // Typedef in a class. Intended to be referenced directly so that it can
+    // trigger the loading of the surrounding classes.
+    typedef TopLevelStruct OtherTypedef;
+  };
+};
+
+// Contains a typedef.
+struct StructWithMember {
+  // This member pulls in the typedef (and classes) above.
+  StructWithNested::Nested<int>::OtherTypedef m;
+  // Typedef in a class. Intended to be referenced directly so that it can
+  // trigger the loading of the surrounding class.
+  typedef int MemberTypedef;
+};
+
+// This is printed and will pull in the typedef in StructWithmember.
+StructWithMember::MemberTypedef pull_in_classes;
+
+
+StructWithMember struct_to_print;
+
+
+int main() {}


        


More information about the lldb-commits mailing list