[lldb] Fix TestWithLimitDebugInfo.py
authorPavel Labath <pavel@labath.sk>
Tue, 26 Apr 2022 14:13:48 +0000 (16:13 +0200)
committerPavel Labath <pavel@labath.sk>
Wed, 27 Apr 2022 13:08:58 +0000 (15:08 +0200)
The test was broken (in the sense that it was not testing what it was
supposed to test) in two ways:
- a Makefile refactor caused it to stop being built with
  -flimit-debug-info
- clang's constructor homing changed the "home" of the type

This patch fixes the Makefile, and modifies the source code to produce
the same result with both type homing strategies. Due to constructor
homing I had to use a different implicitly-defined function for the test
-- I chose the assignment operator.

I also added some sanity checks to the test to ensure that the test is
indeed operating on limited debug info.

lldb/test/API/lang/cpp/limit-debug-info/Makefile
lldb/test/API/lang/cpp/limit-debug-info/TestWithLimitDebugInfo.py
lldb/test/API/lang/cpp/limit-debug-info/base.cpp
lldb/test/API/lang/cpp/limit-debug-info/base.h
lldb/test/API/lang/cpp/limit-debug-info/derived.cpp
lldb/test/API/lang/cpp/limit-debug-info/derived.h
lldb/test/API/lang/cpp/limit-debug-info/main.cpp

index ba7e015..30230b3 100644 (file)
@@ -1,5 +1,5 @@
 CXX_SOURCES = main.cpp derived.cpp base.cpp
 
-CFLAGS_EXTRAS := $(LIMIT_DEBUG_INFO_FLAGS)
+CFLAGS_EXTRAS = $(LIMIT_DEBUG_INFO_FLAGS)
 
 include Makefile.rules
index 69caf94..9956bed 100644 (file)
@@ -8,10 +8,12 @@ class TestWithLimitDebugInfo(TestBase):
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @skipIf(debug_info=no_match(["dwarf"]))
+    @add_test_categories(["dwarf", "dwo"])
     def test_limit_debug_info(self):
         self.build()
 
+        self._check_info_is_limited()
+
         src_file = os.path.join(self.getSourceDir(), "main.cpp")
         src_file_spec = lldb.SBFileSpec(src_file)
         self.assertTrue(src_file_spec.IsValid(), "breakpoint file")
@@ -52,6 +54,12 @@ class TestWithLimitDebugInfo(TestBase):
         self.assertTrue(
             v2.IsValid(),
             "'expr this' results in a valid SBValue object")
-        self.assertTrue(
-            v2.GetError().Success(),
+        self.assertSuccess(
+            v2.GetError(),
             "'expr this' succeeds without an error.")
+
+    def _check_info_is_limited(self):
+        target = self.dbg.CreateTarget(self.getBuildArtifact("main.o"))
+        self.assertTrue(target.IsValid())
+        Foo = target.FindFirstType("Foo")
+        self.assertFalse(Foo.IsValid())
index 4023bdb..2968644 100644 (file)
@@ -1,5 +1,7 @@
 #include "base.h"
 
+FooNS::FooNS() : x(12345) {}
+
 void FooNS::bar() {
     x = 54321;
 }
index d3a0957..f4da767 100644 (file)
@@ -5,6 +5,8 @@ public:
     virtual char baz() = 0;
 
 protected:
+    FooNS();
+
     int x;
 };
 
index 9d77359..911fe3d 100644 (file)
@@ -1,5 +1,10 @@
 #include "derived.h"
 
+Foo foo1;
+Foo foo2;
+
+Foo::Foo() { a = 12345; }
+
 char Foo::baz() {
     return (char)(x&0xff);
 }
index 46b3f83..8f95c52 100644 (file)
@@ -3,11 +3,17 @@
 class Foo : public FooNS
 {
 public:
-    Foo() {
-        a = 12345;
+    Foo();
+
+    // Deliberately defined by hand.
+    Foo &operator=(const Foo &rhs) {
+      a = rhs.a;
+      return *this;
     }
 
     char baz() override;
     int a;
 };
 
+extern Foo foo1;
+extern Foo foo2;
index 64e0349..35cb037 100644 (file)
@@ -1,7 +1,8 @@
 #include "derived.h"
 
 int main() {
-    Foo f; // break here
-    f.bar();
-    return f.baz();
+    foo1 = foo2; // break here
+
+    foo1.bar();
+    return foo1.baz();
 }