[Lldb-commits] [lldb] 71db787 - [lldb/testsuite] Rewrite TestThreadLocal.py

Fred Riss via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 18 20:54:27 PDT 2020


Author: Fred Riss
Date: 2020-03-18T20:52:28-07:00
New Revision: 71db787c4583b5b05b9066509c36eb996924aeda

URL: https://github.com/llvm/llvm-project/commit/71db787c4583b5b05b9066509c36eb996924aeda
DIFF: https://github.com/llvm/llvm-project/commit/71db787c4583b5b05b9066509c36eb996924aeda.diff

LOG: [lldb/testsuite] Rewrite TestThreadLocal.py

It was an inline test before. Clang stopped emitting line information
for the TLS initialization and the inline test didn't have a way to
break before it anymore.

This rewrites the test as a full-fldeged python test and improves the
checking of the error case to verify that the failure we are looking
for is related to the TLS setup not being complete.

Added: 
    

Modified: 
    lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
    lldb/test/API/lang/cpp/thread_local/main.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py b/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
index 5152c0010d10..e7cfa1ca14f2 100644
--- a/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
+++ b/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
@@ -1,6 +1,49 @@
-from lldbsuite.test import lldbinline
 from lldbsuite.test import decorators
 
-lldbinline.MakeInlineTest(__file__, globals(),
-                          lldbinline.expectedFailureAll(oslist=[
-                              "windows", "linux", "netbsd"]))
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+from lldbsuite.test import lldbtest
+
+
+class PlatformProcessCrashInfoTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @expectedFailureAll(oslist=["windows", "linux", "netbsd"])
+    def test_thread_local(self):
+        # Set a breakpoint on the first instruction of the main function,
+        # before the TLS initialization has run.
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+
+        (target, process, _, _) = \
+            lldbutil.run_to_source_breakpoint(self, "Set breakpoint here",
+                                              lldb.SBFileSpec("main.cpp"))
+        self.expect_expr("tl_local_int + 1",
+                         result_type="int", result_value="323")
+        self.expect_expr("*tl_local_ptr + 2",
+                         result_type="int", result_value="324")
+        self.expect_expr("tl_global_int",
+                         result_type="int", result_value="123")
+        self.expect_expr("*tl_global_ptr",
+                         result_type="int", result_value="45")
+
+        # Now see if we emit the correct error when the TLS is not yet
+        # initialized. Let's set a breakpoint on the first instruction
+        # of main.
+        main_module = target.FindModule(lldb.SBFileSpec(exe))
+        main_address = main_module.FindSymbol("main").GetStartAddress()
+        main_bkpt = target.BreakpointCreateBySBAddress(main_address)
+
+        process.Kill()
+        lldbutil.run_to_breakpoint_do_run(self, target, main_bkpt)
+
+        self.expect("expr tl_local_int", error=True,
+                    substrs=["couldn't get the value of variable tl_local_int",
+                             "No TLS data currently exists for this thread"])
+        self.expect("expr *tl_local_ptr", error=True,
+                    substrs=["couldn't get the value of variable tl_local_ptr",
+                             "No TLS data currently exists for this thread"])
+

diff  --git a/lldb/test/API/lang/cpp/thread_local/main.cpp b/lldb/test/API/lang/cpp/thread_local/main.cpp
index 1855b7c5f344..04c7fc0ed74d 100644
--- a/lldb/test/API/lang/cpp/thread_local/main.cpp
+++ b/lldb/test/API/lang/cpp/thread_local/main.cpp
@@ -3,15 +3,9 @@ thread_local int tl_global_int = 123;
 thread_local int *tl_global_ptr = &storage;
 
 int main(int argc, char **argv) {
-  //% self.expect("expr tl_local_int", error=True, substrs=["couldn't get the value of variable tl_local_int"])
-  //% self.expect("expr *tl_local_ptr", error=True, substrs=["couldn't get the value of variable tl_local_ptr"])
   thread_local int tl_local_int = 321;
   thread_local int *tl_local_ptr = nullptr;
   tl_local_ptr = &tl_local_int;
   tl_local_int++;
-  //% self.expect("expr tl_local_int + 1", substrs=["int", "= 323"])
-  //% self.expect("expr *tl_local_ptr + 2", substrs=["int", "= 324"])
-  //% self.expect("expr tl_global_int", substrs=["int", "= 123"])
-  //% self.expect("expr *tl_global_ptr", substrs=["int", "= 45"])
-  return 0;
+  return 0; // Set breakpoint here
 }


        


More information about the lldb-commits mailing list