//===-- main.cpp ------------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// This file deliberately uses low level linux-specific API for thread creation because:
// - instruction-stepping over thread creation using higher-level functions was very slow
// - it was also unreliable due to single-stepping bugs unrelated to this test
// - some threading libraries do not create or destroy threads when we would expect them to

#include <sched.h>

#include <atomic>
#include <cstdio>

enum { STACK_SIZE = 0x2000 };

static uint8_t child_stack[STACK_SIZE];

pid_t child_tid;

std::atomic<bool> flag(false);

int thread_main(void *)
{
    while (! flag) // Make sure the thread does not exit prematurely
        ;

    return 0;
}

int main ()
{
    int ret = clone(thread_main,
            child_stack + STACK_SIZE/2, // Don't care whether the stack grows up or down,
                                        // just point to the middle
            CLONE_CHILD_CLEARTID | CLONE_FILES | CLONE_FS | CLONE_PARENT_SETTID |
            CLONE_SIGHAND | CLONE_SYSVSEM | CLONE_THREAD | CLONE_VM,
            nullptr, // thread_main argument
            &child_tid);

    if (ret == -1)
    {
        perror("clone");
        return 1;
    }

    flag = true;

    return 0;
}
