xref: /llvm-project/lldb/test/API/functionalities/thread/step_out/main.cpp (revision 71c4da83b67a485f0cfacbce8b46eaa497df900e)
199451b44SJordan Rupprecht // This test is intended to create a situation in which two threads are stopped
299451b44SJordan Rupprecht // at a breakpoint and the debugger issues a step-out command.
399451b44SJordan Rupprecht 
499451b44SJordan Rupprecht #include "pseudo_barrier.h"
599451b44SJordan Rupprecht #include <thread>
699451b44SJordan Rupprecht 
799451b44SJordan Rupprecht pseudo_barrier_t g_barrier;
899451b44SJordan Rupprecht 
999451b44SJordan Rupprecht volatile int g_test = 0;
1099451b44SJordan Rupprecht 
step_out_of_here()1199451b44SJordan Rupprecht void step_out_of_here() {
1299451b44SJordan Rupprecht   g_test += 5; // Set breakpoint here
1399451b44SJordan Rupprecht }
1499451b44SJordan Rupprecht 
1599451b44SJordan Rupprecht void *
thread_func()1699451b44SJordan Rupprecht thread_func ()
1799451b44SJordan Rupprecht {
1899451b44SJordan Rupprecht     // Wait until both threads are running
1999451b44SJordan Rupprecht     pseudo_barrier_wait(g_barrier);
2099451b44SJordan Rupprecht 
2199451b44SJordan Rupprecht     // Do something
22*71c4da83SJim Ingham     step_out_of_here(); // But we might still be here
2399451b44SJordan Rupprecht 
2499451b44SJordan Rupprecht     // Return
25ed2853d2SRaphael Isemann     return NULL;  // Expect to stop here after step-out.
2699451b44SJordan Rupprecht }
2799451b44SJordan Rupprecht 
main()2899451b44SJordan Rupprecht int main ()
2999451b44SJordan Rupprecht {
3099451b44SJordan Rupprecht     // Don't let either thread do anything until they're both ready.
3199451b44SJordan Rupprecht     pseudo_barrier_init(g_barrier, 2);
3299451b44SJordan Rupprecht 
3399451b44SJordan Rupprecht     // Create two threads
3499451b44SJordan Rupprecht     std::thread thread_1(thread_func);
3599451b44SJordan Rupprecht     std::thread thread_2(thread_func);
3699451b44SJordan Rupprecht 
3799451b44SJordan Rupprecht     // Wait for the threads to finish
3899451b44SJordan Rupprecht     thread_1.join();
3999451b44SJordan Rupprecht     thread_2.join();
4099451b44SJordan Rupprecht 
4199451b44SJordan Rupprecht     return 0;
4299451b44SJordan Rupprecht }
43