123176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//===-- main.cpp ------------------------------------------------*- C++ -*-===//
223176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//
323176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//                     The LLVM Compiler Infrastructure
423176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//
523176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// This file is distributed under the University of Illinois Open Source
623176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// License. See LICENSE.TXT for details.
723176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//
823176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor//===----------------------------------------------------------------------===//
923176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
1023176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// This test is intended to verify that thread states are properly maintained
1123176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// when transitional actions are performed in the debugger.  Most of the logic
1223176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// is in the test script.  This program merely provides places where the test
1323176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor// can create the intended states.
1423176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
1523176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor#include <unistd.h>
1623176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
1723176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylorvolatile int g_test = 0;
1823176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
1923176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylorint addSomething(int a)
2023176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor{
2123176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    return a + g_test;
2223176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor}
2323176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
2423176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylorint doNothing()
2523176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor{
2623176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    int temp = 0;   // Set first breakpoint here
2723176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
28fb8abab7116d56be42b8aa44da012ca68807f390Andrew Kaylor    while (!g_test && temp < 5)
29fb8abab7116d56be42b8aa44da012ca68807f390Andrew Kaylor    {
30fb8abab7116d56be42b8aa44da012ca68807f390Andrew Kaylor        ++temp;
31fb8abab7116d56be42b8aa44da012ca68807f390Andrew Kaylor        sleep(1);
32fb8abab7116d56be42b8aa44da012ca68807f390Andrew Kaylor    }
3323176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
3423176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    return temp;    // Set second breakpoint here
3523176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor}
3623176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
3723176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylorint main ()
3823176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor{
3923176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    int result = doNothing();
4023176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
4123176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    int i = addSomething(result);
4223176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor
4323176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor    return 0;
4423176afa5f9be537392e6f7ee9a8678f32830e1aAndrew Kaylor}
45