Files
clang-p2996/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp
Louis Dionne fa1c077b41 [runtimes] Remove support for GCC-style 32 bit multilib builds
This patch removes the ability to build the runtimes in the 32 bit
multilib configuration, i.e. using -m32. Instead of doing this, one
should cross-compile the runtimes for the appropriate target triple,
like we do for all other triples.

As it stands, -m32 has several issues, which all seem to be related to
the fact that it's not well supported by the operating systems that
libc++ support. The simplest path towards fixing this is to remove
support for the configuration, which is also the best course of action
if there is little interest for keeping that configuration. If there
is a desire to keep this configuration around, we'll need to do some
work to figure out the underlying issues and fix them.

Differential Revision: https://reviews.llvm.org/D114473
2021-12-01 12:57:01 -05:00

104 lines
1.9 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// UNSUPPORTED: libcpp-has-no-threads
// ALLOW_RETRIES: 2
// <condition_variable>
// class condition_variable_any;
// void notify_one();
#include <condition_variable>
#include <mutex>
#include <thread>
#include <cassert>
#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
typedef std::timed_mutex L0;
typedef std::unique_lock<L0> L1;
L0 m0;
int test0 = 0;
int test1 = 0;
int test2 = 0;
void f1()
{
L1 lk(m0);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
assert(test1 == 1);
test1 = 2;
}
void f2()
{
L1 lk(m0);
assert(test2 == 0);
while (test2 == 0)
cv.wait(lk);
assert(test2 == 1);
test2 = 2;
}
int main(int, char**)
{
std::thread t1 = support::make_test_thread(f1);
std::thread t2 = support::make_test_thread(f2);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
{
L1 lk(m0);
test1 = 1;
test2 = 1;
}
cv.notify_one();
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
L1 lk(m0);
}
if (test1 == 2)
{
t1.join();
test1 = 0;
}
else if (test2 == 2)
{
t2.join();
test2 = 0;
}
else
assert(false);
cv.notify_one();
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
L1 lk(m0);
}
if (test1 == 2)
{
t1.join();
test1 = 0;
}
else if (test2 == 2)
{
t2.join();
test2 = 0;
}
else
assert(false);
return 0;
}