Skip to content
2 changes: 1 addition & 1 deletion llvm-project
Submodule llvm-project updated 22024 files
32 changes: 13 additions & 19 deletions stl/inc/atomic
Original file line number Diff line number Diff line change
Expand Up @@ -2465,25 +2465,6 @@ _NODISCARD bool atomic_is_lock_free(const atomic<_Ty>* _Mem) noexcept {
return _Mem->is_lock_free();
}

template <class _Ty>
_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(
atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {
#if 1 // TRANSITION, ABI
_CSTD memcpy(_STD addressof(_Mem->_Storage), _STD addressof(_Value), sizeof(_Ty));
#else // ^^^ don't break ABI / break ABI vvv
_CSTD memcpy(_Mem, _STD addressof(_Value), sizeof(_Ty));
#endif // TRANSITION, ABI
_CSTD memset(reinterpret_cast<unsigned char*>(_Mem) + sizeof(_Ty), 0, sizeof(atomic<_Ty>) - sizeof(_Ty));
}

template <class _Ty>
_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(
volatile atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {
// NB: respecting volatility here appears unimplementable
static_assert(_Deprecate_non_lock_free_volatile<_Ty>, "Never fails");
_STD atomic_init(const_cast<atomic<_Ty>*>(_Mem), _Value);
}

template <class _Ty>
void atomic_store(volatile atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value) noexcept {
static_assert(_Deprecate_non_lock_free_volatile<_Ty>, "Never fails");
Expand All @@ -2507,6 +2488,19 @@ void atomic_store_explicit(atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Valu
_Mem->store(_Value, _Order);
}

template <class _Ty>
_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(
volatile atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {
static_assert(_Deprecate_non_lock_free_volatile<_Ty>, "Never fails");
_STD atomic_store_explicit(_Mem, _Value, memory_order_relaxed);
}

template <class _Ty>
_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(
atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {
_STD atomic_store_explicit(_Mem, _Value, memory_order_relaxed);
}

template <class _Ty>
_NODISCARD _Ty atomic_load(const volatile atomic<_Ty>* const _Mem) noexcept {
static_assert(_Deprecate_non_lock_free_volatile<_Ty>, "Never fails");
Expand Down
2 changes: 1 addition & 1 deletion tests/libcxx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)

set(LIBCXX_LIT_CONFIG_MAP "map_config(\"${LIBCXX_SOURCE_DIR}/test/lit.cfg\", \"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\")\n")
set(LIBCXX_LIT_CONFIG_MAP "map_config(\"${LIBCXX_SOURCE_DIR}/test/lit.cfg.py\", \"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\")\n")
set_property(GLOBAL APPEND_STRING PROPERTY STL_LIT_CONFIG_MAP ${LIBCXX_LIT_CONFIG_MAP})
set_property(GLOBAL APPEND PROPERTY STL_LIT_TEST_DIRS "${LIBCXX_SOURCE_DIR}/test/std")
74 changes: 61 additions & 13 deletions tests/libcxx/expected_results.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ std/numerics/bit/bit.pow.two/log2p1.pass.cpp FAIL
# test emits warning C4310: cast truncates constant value
std/numerics/bit/bitops.rot/rotl.pass.cpp:0 FAIL

# libc++ doesn't yet implement P1754R1 or P1964R2, so it expects an old value for `__cpp_lib_concepts`
std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp FAIL

# libc++ doesn't yet implement P1001R2, so it expects an old value for `__cpp_lib_execution`
std/language.support/support.limits/support.limits.general/execution.version.pass.cpp FAIL


# *** INTERACTIONS WITH CONTEST / C1XX THAT UPSTREAM LIKELY WON'T FIX ***
# Tracked by VSO-593630 "<filesystem> Enable libcxx filesystem tests"
Expand Down Expand Up @@ -191,6 +197,7 @@ std/language.support/support.limits/support.limits.general/type_traits.version.p
std/language.support/support.limits/support.limits.general/version.version.pass.cpp FAIL

# Contest does not understand .sh tests, which must be run specially
std/namespace/addressable_functions.sh.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp SKIPPED

# These tests set an allocator with a max_size() too small to default construct an unordered container
Expand All @@ -215,8 +222,8 @@ std/containers/sequences/array/empty.verify.cpp SKIPPED
std/containers/sequences/deque/deque.capacity/empty.verify.cpp SKIPPED
std/containers/sequences/forwardlist/empty.verify.cpp SKIPPED
std/containers/sequences/list/list.capacity/empty.verify.cpp SKIPPED
std/containers/sequences/vector/vector.capacity/empty.verify.cpp SKIPPED
std/containers/sequences/vector.bool/empty.verify.cpp SKIPPED
std/containers/sequences/vector/vector.capacity/empty.verify.cpp SKIPPED
std/containers/sequences/vector/vector.cons/copy.move_only.verify.cpp SKIPPED
std/containers/unord/unord.map/empty.verify.cpp SKIPPED
std/containers/unord/unord.multimap/empty.verify.cpp SKIPPED
Expand All @@ -227,31 +234,55 @@ std/depr/depr.lib.binders/depr.lib.bind.2nd/bind2nd.depr_in_cxx11.verify.cpp SKI
std/depr/depr.lib.binders/depr.lib.binder.1st/binder1st.depr_in_cxx11.verify.cpp SKIPPED
std/depr/depr.lib.binders/depr.lib.binder.2nd/binder2nd.depr_in_cxx11.verify.cpp SKIPPED
std/input.output/filesystems/class.path/path.member/path.decompose/empty.verify.cpp SKIPPED
std/input.output/iostream.format/input.streams/istream.rvalue/not_istreamable.verify.cpp SKIPPED
std/input.output/iostream.format/output.streams/ostream.rvalue/not_ostreamable.verify.cpp SKIPPED
std/input.output/iostream.format/quoted.manip/quoted_char.verify.cpp SKIPPED
std/input.output/iostream.format/quoted.manip/quoted_traits.verify.cpp SKIPPED
std/iterators/iterator.container/empty.array.verify.cpp SKIPPED
std/iterators/iterator.container/empty.container.verify.cpp SKIPPED
std/iterators/iterator.container/empty.initializer_list.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size_align.verify.cpp SKIPPED
std/language.support/cmp/cmp.categories.pre/zero_type.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size_align_nothrow.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size_align.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size_nothrow.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.array/new_size.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.placement/new_array_ptr.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.placement/new_ptr.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size_align.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size_align_nothrow.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size_align.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size_nothrow.verify.cpp SKIPPED
std/language.support/support.dynamic/new.delete/new.delete.single/new_size.verify.cpp SKIPPED
std/language.support/support.dynamic/ptr.launder/launder.nodiscard.verify.cpp SKIPPED
std/numerics/numbers/illformed.verify.cpp SKIPPED
std/re/re.results/re.results.size/empty.verify.cpp SKIPPED
std/strings/basic.string/string.capacity/empty.verify.cpp SKIPPED
std/strings/string.view/string.view.capacity/empty.verify.cpp SKIPPED
std/thread/futures/futures.async/async.verify.cpp SKIPPED
std/utilities/allocator.adaptor/allocator.adaptor.members/allocate_size.verify.cpp SKIPPED
std/thread/futures/futures.promise/copy_assign.verify.cpp SKIPPED
std/thread/futures/futures.promise/copy_ctor.verify.cpp SKIPPED
std/thread/futures/futures.unique_future/copy_assign.verify.cpp SKIPPED
std/thread/futures/futures.unique_future/copy_ctor.verify.cpp SKIPPED
std/utilities/allocator.adaptor/allocator.adaptor.members/allocate_size_hint.verify.cpp SKIPPED
std/utilities/allocator.adaptor/allocator.adaptor.members/allocate_size.verify.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.verify.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.verify.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.verify.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.verify.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.verify.cpp SKIPPED
std/utilities/function.objects/negators/binary_negate.depr_in_cxx17.verify.cpp SKIPPED
std/utilities/function.objects/negators/not1.depr_in_cxx17.verify.cpp SKIPPED
std/utilities/function.objects/negators/not2.depr_in_cxx17.verify.cpp SKIPPED
std/utilities/function.objects/negators/unary_negate.depr_in_cxx17.verify.cpp SKIPPED
std/utilities/memory/allocator.traits/allocator.traits.members/allocate.verify.cpp SKIPPED
std/utilities/memory/default.allocator/allocator_types.deprecated_in_cxx17.verify.cpp SKIPPED
std/utilities/memory/default.allocator/allocator_types.removed_in_cxx20.verify.cpp SKIPPED
std/utilities/memory/default.allocator/allocator_void.deprecated_in_cxx17.verify.cpp SKIPPED
std/utilities/memory/default.allocator/allocator.members/allocate.constexpr.size.verify.cpp SKIPPED
std/utilities/memory/default.allocator/allocator.members/allocate.verify.cpp SKIPPED

# GH-1382: Our machinery doesn't understand compile-only `.compile.pass.cpp` tests
std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp SKIPPED


# *** MISSING STL FEATURES ***
# C++20 P0355R7 "<chrono> Calendars And Time Zones"
Expand Down Expand Up @@ -464,6 +495,21 @@ std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp FAIL
# C++20 P0768R1 "Library Support for the Spaceship (Comparison) Operator"
std/language.support/support.limits/support.limits.general/compare.version.pass.cpp FAIL

# C++20 P0784R7 "More constexpr containers"
std/utilities/memory/allocator.traits/allocator.traits.members/allocate.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/allocate_hint.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/construct.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/deallocate.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/destroy.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/max_size.pass.cpp FAIL
std/utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction.pass.cpp FAIL
std/utilities/memory/default.allocator/allocator.globals/eq.pass.cpp FAIL
std/utilities/memory/default.allocator/allocator.members/allocate.pass.cpp FAIL
std/utilities/memory/specialized.algorithms/specialized.construct/construct_at.pass.cpp FAIL
std/utilities/memory/specialized.algorithms/specialized.destroy/destroy.pass.cpp FAIL
std/utilities/memory/specialized.algorithms/specialized.destroy/destroy_at.pass.cpp FAIL
std/utilities/memory/specialized.algorithms/specialized.destroy/destroy_n.pass.cpp FAIL

# C++20 P0896R4 "<ranges>"
std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp FAIL
std/language.support/support.limits/support.limits.general/functional.version.pass.cpp FAIL
Expand Down Expand Up @@ -494,6 +540,11 @@ std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp:0 FAIL
std/containers/views/span.cons/ptr_len.pass.cpp:0 FAIL
std/containers/views/span.cons/ptr_ptr.pass.cpp:0 FAIL

# VSO-1168723 "Implicit copy assignment incorrectly not constexpr when subobject has explicit constexpr copy constructor"
std/utilities/utility/pairs/pairs.pair/assign_pair.pass.cpp:0 FAIL
std/utilities/utility/pairs/pairs.pair/assign_rv_pair.pass.cpp:0 FAIL
std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp:0 FAIL


# *** CLANG COMPILER BUGS ***
# LLVM-33230 "Clang on Windows should define __STDCPP_THREADS__ to be 1"
Expand All @@ -503,11 +554,6 @@ std/thread/macro.pass.cpp:1 FAIL
std/depr/depr.c.headers/tgmath_h.pass.cpp:1 FAIL


# *** CLANG FEATURES NOT YET IMPLEMENTED ***
# P0960R3 "Allow initializing aggregates from a parenthesized list of values"
std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp:0 FAIL


# *** CLANG ISSUES, NOT YET ANALYZED ***
# Clang doesn't enable sized deallocation by default. Should we add -fsized-deallocation or do something else?
std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.pass.cpp:1 FAIL
Expand Down Expand Up @@ -617,6 +663,10 @@ std/language.support/support.runtime/cstdlib.pass.cpp FAIL
std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp SKIPPED
std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp SKIPPED

# OS-29877133 "LDBL_DECIMAL_DIG missing from <float.h>"
std/depr/depr.c.headers/float_h.pass.cpp:0 FAIL
std/language.support/support.limits/c.limits/cfloat.pass.cpp:0 FAIL


# *** LIKELY BOGUS TESTS ***
# "error: _LIBCPP_VERSION not defined"
Expand Down Expand Up @@ -746,8 +796,6 @@ std/containers/sequences/array/array.creation/to_array.pass.cpp:0 FAIL
std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp FAIL
std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp FAIL
std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp FAIL
std/iterators/stream.iterators/ostream.iterator/types.pass.cpp FAIL
std/iterators/stream.iterators/ostreambuf.iterator/types.pass.cpp FAIL

# Tests emit warning C4244: 'argument': conversion from 'T' to 'const std::complex<double>::_Ty', possible loss of data
std/numerics/complex.number/cmplx.over/conj.pass.cpp:0 FAIL
Expand Down
29 changes: 29 additions & 0 deletions tests/libcxx/lit.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

from pathlib import Path
import importlib
import site

site.addsitedir(str(Path(__file__).parents[1] / "utils"))
site.addsitedir(str(Path(__file__).parent / "tests"))

config.name = 'libc++'
config.suffixes = {".pass.cpp", ".fail.cpp"}

if config.test_source_root is None:
config.test_source_root = str(Path(__file__).parent)

config.test_exec_root = getattr(config, 'test_exec_root', None)

if not config.test_exec_root:
import tempfile
config.test_exec_root = tempfile.mkdtemp(prefix=config.name + '-testsuite-')
lit_config.note('Creating temporary directory for tests: %s' % config.test_exec_root)

config_module_name = getattr(config, 'config_module_name', 'stl.test.config')
config_module = importlib.import_module(config_module_name)

configuration = config_module.Configuration(lit_config, config)
configuration.configure()
config.test_format = configuration.get_test_format()
9 changes: 3 additions & 6 deletions tests/libcxx/lit.site.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,8 @@ config.msvc_toolset_libs_root = "@TOOLSET_LIB@"
config.stl_build_root = "@STL_BUILD_ROOT@"
config.stl_src_root = "@STL_SOURCE_DIR@"
config.target_arch = "@VCLIBS_TARGET_ARCHITECTURE@"
config.test_exec_root = "@LIBCXX_TEST_OUTPUT_DIR@"
config.test_source_root = "@LIBCXX_SOURCE_DIR@/test"
config.test_subdirs = ["@LIBCXX_SOURCE_DIR@/test/std"]

lit_config.params['use_old_format'] = True
config.loaded_site_config = True
lit_config.load_config(config, "@LIBCXX_SOURCE_DIR@/test/lit.cfg")

config.suffixes = [".pass.cpp", ".fail.cpp"]
config.test_exec_root = "@LIBCXX_TEST_OUTPUT_DIR@"
lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg")
Loading