Index: libcxx/include/__config =================================================================== --- libcxx/include/__config +++ libcxx/include/__config @@ -152,7 +152,7 @@ # endif // Feature macros for disabling pre ABI v1 features. All of these options // are deprecated. -# if defined(__FreeBSD__) +# if defined(__FreeBSD__) && !defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR) # define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR # endif # endif Index: libcxx/test/libcxx/modules_include.sh.cpp =================================================================== --- libcxx/test/libcxx/modules_include.sh.cpp +++ libcxx/test/libcxx/modules_include.sh.cpp @@ -13,6 +13,8 @@ // The system-provided seems to be broken on AIX // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME + // GCC doesn't support -fcxx-modules // UNSUPPORTED: gcc Index: libcxx/test/libcxx/selftest/remote-substitutions.sh.cpp =================================================================== --- libcxx/test/libcxx/selftest/remote-substitutions.sh.cpp +++ libcxx/test/libcxx/selftest/remote-substitutions.sh.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // Make sure that test-executables can appear in RUN lines and be executed // effectively. This somewhat difficult-to-understand test checks that when // we run with a remote executor, test-executables are copied to the remote Index: libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp =================================================================== --- libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp +++ /dev/null @@ -1,70 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: no-threads -// XFAIL: c++03 -// XFAIL: !non-lockfree-atomics - -// This test requires the dylib support introduced in D68480, which shipped in macOS 11.0. -// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14|15}} - -// - -// template -// void -// atomic_wait(const volatile atomic*, atomic::value_type); -// -// template -// void -// atomic_wait(const atomic*, atomic::value_type); - -#include -#include -#include -#include - -#include "make_test_thread.h" -#include "test_macros.h" -#include "atomic_helpers.h" - -template -struct TestFn { - void operator()() const { - typedef std::atomic A; - { - A t(T(1)); - assert(std::atomic_load(&t) == T(1)); - std::atomic_wait(&t, T(0)); - std::thread t1 = support::make_test_thread([&]() { - std::atomic_store(&t, T(3)); - std::atomic_notify_one(&t); - }); - std::atomic_wait(&t, T(1)); - assert(std::atomic_load(&t) == T(3)); - t1.join(); - } - { - volatile A vt(T(2)); - assert(std::atomic_load(&vt) == T(2)); - std::atomic_wait(&vt, T(1)); - std::thread t2 = support::make_test_thread([&]() { - std::atomic_store(&vt, T(4)); - std::atomic_notify_one(&vt); - }); - std::atomic_wait(&vt, T(2)); - assert(std::atomic_load(&vt) == T(4)); - t2.join(); - } - } -}; - -int main(int, char**) { - TestEachAtomicType()(); - - return 0; -} Index: libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait_explicit.pass.cpp =================================================================== --- libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait_explicit.pass.cpp +++ /dev/null @@ -1,72 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: no-threads -// XFAIL: c++03 -// XFAIL: !non-lockfree-atomics - -// This test requires the dylib support introduced in D68480, which shipped in macOS 11.0. -// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14|15}} - -// - -// template -// void -// atomic_wait_explicit(const volatile atomic*, atomic::value_type, -// memory_order); -// -// template -// void -// atomic_wait_explicit(const volatile atomic*, atomic::value_type, -// memory_order); - -#include -#include -#include -#include - -#include "make_test_thread.h" -#include "test_macros.h" -#include "atomic_helpers.h" - -template -struct TestFn { - void operator()() const { - typedef std::atomic A; - { - A t(T(1)); - assert(std::atomic_load(&t) == T(1)); - std::atomic_wait_explicit(&t, T(0), std::memory_order_seq_cst); - std::thread t1 = support::make_test_thread([&]() { - std::atomic_store(&t, T(3)); - std::atomic_notify_one(&t); - }); - std::atomic_wait_explicit(&t, T(1), std::memory_order_seq_cst); - assert(std::atomic_load(&t) == T(3)); - t1.join(); - } - { - volatile A vt(T(2)); - assert(std::atomic_load(&vt) == T(2)); - std::atomic_wait_explicit(&vt, T(1), std::memory_order_seq_cst); - std::thread t2 = support::make_test_thread([&]() { - std::atomic_store(&vt, T(4)); - std::atomic_notify_one(&vt); - }); - std::atomic_wait_explicit(&vt, T(2), std::memory_order_seq_cst); - assert(std::atomic_load(&vt) == T(4)); - t2.join(); - } - } -}; - -int main(int, char**) { - TestEachAtomicType()(); - - return 0; -} Index: libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp =================================================================== --- libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp +++ libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03 // Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp @@ -10,6 +10,7 @@ // XFAIL: netbsd // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.zh_CN.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp @@ -10,6 +10,7 @@ // XFAIL: netbsd // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.zh_CN.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp @@ -11,6 +11,8 @@ // NetBSD does not support LC_MONETARY at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ru_RU.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_MONETARY at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ru_RU.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_MONETARY at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ru_RU.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_MONETARY at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ru_RU.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname.pass.cpp @@ -10,6 +10,8 @@ // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.zh_CN.UTF-8 +// XFAIL: LIBCXX-FREEBSD-FIXME + // // class time_get_byname Index: libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide.pass.cpp @@ -11,6 +11,8 @@ // REQUIRES: locale.zh_CN.UTF-8 // XFAIL: no-wide-characters +// XFAIL: LIBCXX-FREEBSD-FIXME + // // class time_get_byname Index: libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_TIME at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ru_RU.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one_wide.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one_wide.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.time/locale.time.get.byname/get_one_wide.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_TIME at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // XFAIL: no-wide-characters // REQUIRES: locale.en_US.UTF-8 Index: libcxx/test/std/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp +++ libcxx/test/std/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp @@ -9,6 +9,8 @@ // NetBSD does not support LC_TIME at the moment // XFAIL: netbsd +// XFAIL: LIBCXX-FREEBSD-FIXME + // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ja_JP.UTF-8 Index: libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp +++ libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp @@ -10,6 +10,7 @@ // XFAIL: netbsd // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 Index: libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp =================================================================== --- libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp +++ libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp @@ -10,6 +10,7 @@ // XFAIL: netbsd // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.en_US.UTF-8 // REQUIRES: locale.fr_FR.UTF-8 Index: libcxx/test/std/re/re.traits/lookup_collatename.pass.cpp =================================================================== --- libcxx/test/std/re/re.traits/lookup_collatename.pass.cpp +++ libcxx/test/std/re/re.traits/lookup_collatename.pass.cpp @@ -8,7 +8,9 @@ // // NetBSD does not support LC_COLLATE at the moment // XFAIL: netbsd + // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.cs_CZ.ISO8859-2 Index: libcxx/test/std/re/re.traits/transform_primary.pass.cpp =================================================================== --- libcxx/test/std/re/re.traits/transform_primary.pass.cpp +++ libcxx/test/std/re/re.traits/transform_primary.pass.cpp @@ -8,7 +8,9 @@ // // NetBSD does not support LC_COLLATE at the moment // XFAIL: netbsd + // XFAIL: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-FREEBSD-FIXME // REQUIRES: locale.cs_CZ.ISO8859-2 Index: libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp =================================================================== --- libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp +++ /dev/null @@ -1,98 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: no-threads -// UNSUPPORTED: c++03, c++11 -// ALLOW_RETRIES: 2 - -// dylib support for shared_mutex was added in macosx10.12 -// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11}} - -// - -// template class shared_lock; - -// void lock(); - -#include -#include -#include -#include -#include - -#include "make_test_thread.h" -#include "test_macros.h" - -std::shared_timed_mutex m; - -typedef std::chrono::system_clock Clock; -typedef Clock::time_point time_point; -typedef Clock::duration duration; -typedef std::chrono::milliseconds ms; -typedef std::chrono::nanoseconds ns; - -ms WaitTime = ms(250); - -// Thread sanitizer causes more overhead and will sometimes cause this test -// to fail. To prevent this we give Thread sanitizer more time to complete the -// test. -#if !defined(TEST_IS_EXECUTED_IN_A_SLOW_ENVIRONMENT) -ms Tolerance = ms(25); -#else -ms Tolerance = ms(25 * 5); -#endif - - -void f() -{ - std::shared_lock lk(m, std::defer_lock); - time_point t0 = Clock::now(); - lk.lock(); - time_point t1 = Clock::now(); - assert(lk.owns_lock() == true); - ns d = t1 - t0 - WaitTime; - assert(d < Tolerance); // within tolerance -#ifndef TEST_HAS_NO_EXCEPTIONS - try - { - lk.lock(); - assert(false); - } - catch (std::system_error& e) - { - assert(e.code().value() == EDEADLK); - } -#endif - lk.unlock(); - lk.release(); -#ifndef TEST_HAS_NO_EXCEPTIONS - try - { - lk.lock(); - assert(false); - } - catch (std::system_error& e) - { - assert(e.code().value() == EPERM); - } -#endif -} - -int main(int, char**) -{ - m.lock(); - std::vector v; - for (int i = 0; i < 5; ++i) - v.push_back(support::make_test_thread(f)); - std::this_thread::sleep_for(WaitTime); - m.unlock(); - for (auto& t : v) - t.join(); - - return 0; -} Index: libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/ostream.pass.cpp =================================================================== --- libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/ostream.pass.cpp +++ libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/ostream.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/test/std/time/time.syn/formatter.day.pass.cpp =================================================================== --- libcxx/test/std/time/time.syn/formatter.day.pass.cpp +++ libcxx/test/std/time/time.syn/formatter.day.pass.cpp @@ -5,6 +5,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/test/std/time/time.syn/formatter.duration.pass.cpp =================================================================== --- libcxx/test/std/time/time.syn/formatter.duration.pass.cpp +++ libcxx/test/std/time/time.syn/formatter.duration.pass.cpp @@ -5,6 +5,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/test/std/time/time.syn/formatter.month.pass.cpp =================================================================== --- libcxx/test/std/time/time.syn/formatter.month.pass.cpp +++ libcxx/test/std/time/time.syn/formatter.month.pass.cpp @@ -5,6 +5,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp =================================================================== --- libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp +++ libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp @@ -5,6 +5,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/test/std/time/time.syn/formatter.year.pass.cpp =================================================================== --- libcxx/test/std/time/time.syn/formatter.year.pass.cpp +++ libcxx/test/std/time/time.syn/formatter.year.pass.cpp @@ -5,6 +5,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-FREEBSD-FIXME + // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: libcpp-has-no-incomplete-format Index: libcxx/utils/ci/buildkite-pipeline.yml =================================================================== --- libcxx/utils/ci/buildkite-pipeline.yml +++ libcxx/utils/ci/buildkite-pipeline.yml @@ -75,6 +75,25 @@ limit: 2 timeout_in_minutes: 120 + # Try out the one we're adding + - label: "FreeBSD" + command: "libcxx/utils/ci/run-buildbot generic-cxx2b" + artifact_paths: + - "**/test-results.xml" + - "**/*.abilist" + env: + CC: "clang15" + CXX: "clang++15" + agents: + queue: "libcxx-builders" + os: "freebsd" + retry: + automatic: + - exit_status: -1 # Agent was lost + limit: 2 + timeout_in_minutes: 120 + + - wait # # General testing with the default configuration, under all the supported # Standard modes, with Clang and GCC. This catches most issues upfront. Index: libcxx/utils/libcxx/test/features.py =================================================================== --- libcxx/utils/libcxx/test/features.py +++ libcxx/utils/libcxx/test/features.py @@ -271,7 +271,8 @@ """), actions=[AddCompileFlag('-DTEST_WINDOWS_DLL')]), Feature(name='linux', when=lambda cfg: '__linux__' in compilerMacros(cfg)), Feature(name='netbsd', when=lambda cfg: '__NetBSD__' in compilerMacros(cfg)), - Feature(name='freebsd', when=lambda cfg: '__FreeBSD__' in compilerMacros(cfg)) + Feature(name='freebsd', when=lambda cfg: '__FreeBSD__' in compilerMacros(cfg)), + Feature(name='LIBCXX-FREEBSD-FIXME', when=lambda cfg: '__FreeBSD__' in compilerMacros(cfg)) ] # Add features representing the build host platform name. Index: libcxxabi/test/thread_local_destruction_order.pass.cpp =================================================================== --- libcxxabi/test/thread_local_destruction_order.pass.cpp +++ libcxxabi/test/thread_local_destruction_order.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: c++03 // UNSUPPORTED: no-threads +// XFAIL: LIBCXX-FREEBSD-FIXME + #include #include