/* TAGS: big */ /* VERIFY_OPTS: -o nofail:malloc */ /* CC_OPTS: -Dgmtime_r=gmtime -Dlocaltime_r=localtime -DBOOST_HAS_PTHREADS -DBOOST_THREAD_POSIX -DPOSIX_THREADS -D__linux -D_SC_PAGESIZE -I $BOOST/libs/thread/include/ -I test/termination -I $BOOST/libs/config/include/ -I $BOOST/libs/throw_exception/include -I $BOOST/libs/assert/include/ -I $BOOST/libs/core/include/ -I $BOOST/libs/system/include/ -I $BOOST/libs/type_traits/include/ -I $BOOST/libs/static_assert/include/ -I $BOOST/libs/move/include/ -I $BOOST/libs/date_time/include/ -I $BOOST/libs/smart_ptr/include/ -I $BOOST/libs/predef/include -I $BOOST/libs/utility/include/ -I $BOOST/libs/mpl/include/ -I$BOOST/libs/preprocessor/include/ -I $BOOST/libs/numeric/conversion/include/ -I $BOOST/libs/chrono/include/ -I $BOOST/libs/ratio/include/ -I $BOOST/libs/integer/include/ -I $BOOST/libs/bind/include/ -I $BOOST/libs/io/include/ -I $BOOST/libs/container_hash/include/ -I $BOOST/libs/detail/include/ -I $BOOST/libs/atomic/include/ -I $BOOST/libs/tuple/include/ -I $BOOST/libs/exception/include/ -I $BOOST/libs/iterator/include/ -I $BOOST/libs/optional/include/ -I $BOOST/libs/function/include/ -I $BOOST/libs/type_index/include/ -I $BOOST/libs/algorithm/include -I $BOOST/libs/range/include -I $BOOST/libs/concept_check/include/ -I $BOOST/libs/lexical_cast/include/ -I $BOOST/libs/array/include/ -I $BOOST/libs/container/include/ -I $BOOST/libs/math/include */ /* EXTRA_SRCS: $BOOST/libs/thread/src/pthread/thread.cpp $BOOST/libs/thread/src/pthread/once_atomic.cpp */ #include #include // V: ok@safety // V: more@safety CC_OPT: -DWCNT=3 // V: less@safety CC_OPT: -DWCNT=1 ERR: error trace: Assertion // V: ok@local V_OPT: --nontermination local // V: more@local V_OPT: --nontermination local CC_OPT: -DWCNT=3 ERR: error trace: termsec check // V: less@local V_OPT: --nontermination local CC_OPT: -DWCNT=1 ERR: error trace: Assertion // V: ok@global V_OPT: --nontermination local // V: more@global V_OPT: --nontermination global CC_OPT: -DWCNT=3 ERR: error trace: .* // V: less@global V_OPT: --nontermination global CC_OPT: -DWCNT=1 ERR: error trace: Assertion #ifdef WCNT const int wait_count = WCNT; #else const int wait_count = 2; #endif #ifdef CCNT const int check_count = CCNT; #else const int check_count = 2; #endif int main() { boost::latch latch{ wait_count }; std::atomic< int > cnt{ 0 }; auto worker = [&] { ++cnt; latch.count_down(); }; std::thread ta( worker ), tb( worker ); latch.wait(); assert( cnt == check_count ); ta.join(); tb.join(); }