brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 1d959e9 Raw
70 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// UNSUPPORTED: no-threads10 11 12// <thread>13 14// class thread15 16// ~thread();17 18#include <cassert>19#include <cstdlib>20#include <exception>21#include <new>22#include <thread>23 24#include "make_test_thread.h"25#include "test_macros.h"26 27class G28{29    int alive_;30public:31    static int n_alive;32    static bool op_run;33 34    G() : alive_(1) {++n_alive;}35    G(const G& g) : alive_(g.alive_) {++n_alive;}36    ~G() {alive_ = 0; --n_alive;}37 38    void operator()()39    {40        assert(alive_ == 1);41        assert(n_alive >= 1);42        op_run = true;43    }44};45 46int G::n_alive = 0;47bool G::op_run = false;48 49void f1()50{51    std::_Exit(0);52}53 54int main(int, char**)55{56    std::set_terminate(f1);57    {58        assert(G::n_alive == 0);59        assert(!G::op_run);60        G g;61        {62          std::thread t = support::make_test_thread(g);63          std::this_thread::sleep_for(std::chrono::milliseconds(250));64        }65    }66    assert(false);67 68  return 0;69}70