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 } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits