From 53a420fba21cf1644972b34dcd811a43cdb8368d Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Mon, 2 Jan 2017 19:18:58 +0000 Subject: [PATCH 1/3] Vendor import of libc++ trunk r290819: https://llvm.org/svn/llvm-project/libcxx/trunk@290819 --- .clang-format | 11 + .gitignore | 7 + CMakeLists.txt | 184 +- NOTES.TXT | 28 + TODO.TXT | 30 - benchmarks/CMakeLists.txt | 154 + benchmarks/ContainerBenchmarks.hpp | 113 + benchmarks/GenerateInput.hpp | 142 + benchmarks/algorithms.bench.cpp | 62 + benchmarks/filesystem.bench.cpp | 138 + benchmarks/string.bench.cpp | 49 + benchmarks/unordered_set_operations.bench.cpp | 318 +- benchmarks/util_smartptr.bench.cpp | 42 + benchmarks/vector_operations.bench.cpp | 32 + cmake/Modules/CheckLibcxxAtomic.cmake | 8 +- cmake/Modules/HandleLibCXXABI.cmake | 16 +- cmake/Modules/HandleLibcxxFlags.cmake | 8 + cmake/Modules/HandleOutOfTreeLLVM.cmake | 87 +- cmake/config-ix.cmake | 63 +- docs/BuildingLibcxx.rst | 50 +- docs/DesignDocs/DebugMode.rst | 100 + docs/DesignDocs/VisibilityMacros.rst | 127 + docs/Makefile.sphinx | 2 +- docs/TestingLibcxx.rst | 100 +- docs/UsingLibcxx.rst | 50 + docs/conf.py | 4 +- docs/index.rst | 3 +- include/CMakeLists.txt | 29 +- include/__bit_reference | 28 +- include/__config | 373 +- include/__config_site.in | 2 + include/__debug | 102 +- include/__functional_03 | 24 +- include/__functional_base | 11 +- include/__hash_table | 499 +- include/__libcpp_version | 1 + include/__locale | 19 +- include/__mutex_base | 4 +- include/__nullptr | 4 - include/__refstring | 192 +- include/__std_stream | 2 +- include/__string | 766 +++ include/__threading_support | 123 +- include/__tree | 21 +- include/__tuple | 107 +- include/algorithm | 223 +- include/any | 663 ++ include/array | 16 +- include/atomic | 13 +- include/bitset | 68 +- include/chrono | 5 +- include/cmath | 102 +- include/complex | 369 +- include/cstdio | 8 +- include/cstdlib | 8 +- include/cwchar | 6 - include/deque | 37 +- include/exception | 31 +- include/experimental/algorithm | 60 +- include/experimental/any | 7 +- include/experimental/dynarray | 31 +- include/experimental/filesystem | 155 +- include/experimental/memory_resource | 8 +- include/experimental/numeric | 103 + include/experimental/optional | 63 +- include/experimental/propagate_const | 12 +- include/experimental/string_view | 8 +- include/experimental/type_traits | 103 + include/forward_list | 25 +- include/fstream | 26 +- include/functional | 171 +- include/future | 17 +- include/inttypes.h | 7 + include/iomanip | 23 +- include/ios | 21 +- include/istream | 180 +- include/iterator | 411 +- include/limits | 8 +- include/limits.h | 65 + include/list | 134 +- include/locale | 88 +- include/locale.h | 45 + include/math.h | 57 +- include/memory | 466 +- include/module.modulemap | 564 +- include/mutex | 4 +- include/new | 114 +- include/numeric | 66 + include/optional | 1314 ++++ include/ostream | 89 +- include/queue | 6 +- include/random | 3 +- include/ratio | 24 +- include/regex | 101 +- include/scoped_allocator | 91 +- include/set | 4 +- include/sstream | 54 +- include/stack | 6 +- include/stdexcept | 120 +- include/stdint.h | 121 + include/streambuf | 302 +- include/string | 1222 ++-- include/string_view | 754 +++ include/support/android/locale_bionic.h | 4 +- include/support/win32/locale_win32.h | 11 +- include/support/win32/math_win32.h | 117 - include/support/win32/support.h | 22 +- include/support/xlocale/__posix_l_fallback.h | 4 +- include/system_error | 31 +- include/thread | 31 +- include/tuple | 157 +- include/type_traits | 338 +- include/typeinfo | 18 +- include/unordered_map | 26 +- include/utility | 360 +- include/valarray | 6 +- include/variant | 1568 +++++ include/vector | 143 +- lib/CMakeLists.txt | 184 +- lib/abi/3.9/x86_64-apple-darwin16.0.abilist | 2448 +++++++ lib/abi/3.9/x86_64-linux-gnu.abilist | 2010 ++++++ lib/abi/CHANGELOG.TXT | 135 + lib/abi/CMakeLists.txt | 28 + lib/abi/README.TXT | 8 + lib/abi/x86_64-apple-darwin16.0.0.abilist | 2375 +++++++ lib/abi/x86_64-unknown-linux-gnu.abilist | 1905 ++++++ lib/buildit | 2 +- src/algorithm.cpp | 2 +- src/any.cpp | 9 +- src/chrono.cpp | 83 +- src/condition_variable.cpp | 6 + src/debug.cpp | 100 +- src/exception.cpp | 4 +- .../filesystem/directory_iterator.cpp | 4 +- src/experimental/filesystem/operations.cpp | 184 +- src/experimental/filesystem/path.cpp | 576 +- src/experimental/memory_resource.cpp | 17 +- src/include/atomic_support.h | 2 +- src/include/config_elast.h | 2 + src/ios.cpp | 18 +- src/locale.cpp | 311 +- src/memory.cpp | 46 +- src/mutex.cpp | 9 +- src/new.cpp | 174 +- src/optional.cpp | 16 +- src/random.cpp | 2 + src/stdexcept.cpp | 3 +- src/string.cpp | 8 +- src/strstream.cpp | 3 + .../solaris/{xlocale.c => xlocale.cpp} | 5 +- src/support/win32/locale_win32.cpp | 5 + src/system_error.cpp | 3 + src/thread.cpp | 10 +- src/typeinfo.cpp | 4 + src/variant.cpp | 18 + test/CMakeLists.txt | 31 +- test/libcxx/algorithms/debug_less.pass.cpp | 167 + .../atomics/atomics.align/align.pass.sh.cpp | 93 + .../atomics/libcpp-has-no-threads.fail.cpp | 1 + test/libcxx/compiler.py | 195 +- .../sequences/deque/incomplete.pass.cpp | 1 + .../sequences/list/db_iterators_6.pass.cpp | 33 - .../sequences/list/db_iterators_7.pass.cpp | 33 - .../sequences/list/db_iterators_9.pass.cpp | 59 - .../list/list.special/db_swap_1.pass.cpp | 36 - .../list/list.special/db_swap_2.pass.cpp | 36 - .../containers/sequences/vector/asan.pass.cpp | 8 +- .../sequences/vector/asan_throw.pass.cpp | 4 +- .../db_associative_container_tests.pass.cpp | 64 + .../db_sequence_container_iterators.pass.cpp | 265 + .../debug/containers/db_string.pass.cpp | 96 + .../db_unord_container_tests.pass.cpp | 66 + test/libcxx/debug/debug_abort.pass.cpp | 30 + test/libcxx/debug/debug_throw.pass.cpp | 36 + .../debug_throw_register.pass.cpp} | 24 +- .../depr/depr.c.headers/ciso646.pass.cpp} | 14 +- .../depr/depr.c.headers/complex.h.pass.cpp} | 15 +- .../depr/depr.c.headers/locale_h.pass.cpp} | 15 +- .../depr/depr.c.headers/tgmath_h.pass.cpp | 23 + test/libcxx/double_include.sh.cpp | 89 +- .../experimental/any/small_type.pass.cpp | 2 +- .../dynarray/dynarray.cons/default.pass.cpp | 7 +- .../default_throws_bad_alloc.pass.cpp | 2 +- .../dynarray/dynarray.overview/at.pass.cpp | 2 +- .../dynarray.overview/begin_end.pass.cpp | 19 +- .../class.path/path.itr/iterator_db.pass.cpp | 74 + .../path.member/path.append.pass.cpp | 70 + .../class.path/path.req/is_pathable.pass.cpp | 5 + .../iterators/trivial_iterators.pass.cpp | 4 +- .../new_faligned_allocation.sh.cpp | 77 + test/libcxx/libcpp_version.pass.cpp | 28 + .../conversions.string/ctor_move.pass.cpp | 4 +- test/libcxx/modules/cinttypes_exports.sh.cpp | 21 + test/libcxx/modules/clocale_exports.sh.cpp | 24 + test/libcxx/modules/cstdint_exports.sh.cpp | 21 + test/libcxx/modules/inttypes_h_exports.sh.cpp | 20 + test/libcxx/modules/stdint_h_exports.sh.cpp | 20 + .../numerics/c.math/constexpr-fns.pass.cpp | 32 + test/libcxx/numerics/c.math/ctgmath.pass.cpp | 24 + test/libcxx/numerics/c.math/tgmath_h.pass.cpp | 20 + .../numerics/c.math/version_cmath.pass.cpp | 0 .../complex.number/ccmplx/ccomplex.pass.cpp | 21 + .../strings/iterators.exceptions.pass.cpp | 24 +- .../strings/iterators.noexcept.pass.cpp | 1 + test/libcxx/test/config.py | 216 +- test/libcxx/test/format.py | 103 +- test/libcxx/test/target_info.py | 5 +- .../native_handle.pass.cpp | 2 +- .../variadic_mutex_mangling.pass.cpp | 1 + .../thread.mutex.class/native_handle.pass.cpp | 2 +- .../native_handle.pass.cpp | 2 +- .../thread_safety_lock_guard.pass.cpp | 1 + .../thread_safety_lock_unlock.pass.cpp | 1 + .../thread_safety_missing_unlock.fail.cpp | 1 + ...thread_safety_requires_capability.pass.cpp | 1 + .../native_handle.pass.cpp | 2 +- .../thread.thread.class/types.pass.cpp | 2 +- .../utilities/any/size_and_alignment.pass.cpp | 23 + test/libcxx/utilities/any/small_type.pass.cpp | 114 + .../utilities/any/version.pass.cpp} | 12 +- .../func.require/bullet_1_2_3.pass.cpp | 3 +- .../optional.object.assign/copy.pass.cpp | 74 + .../optional.object.assign/move.pass.cpp | 71 + .../optional.object.ctor/copy.pass.cpp | 59 + .../optional.object.ctor/move.pass.cpp | 60 + .../special_member_gen.pass.cpp | 66 + .../utilities/optional/version.pass.cpp | 20 + .../diagnose_reference_binding.fail.cpp | 33 + .../diagnose_reference_binding.pass.cpp | 71 + ...ed_arity_initialization_extension.pass.cpp | 108 + ...ed_arity_initialization_extension.pass.cpp | 117 + .../non_trivial_copy_move_ABI.pass.cpp | 137 +- .../variant.assign/copy.pass.cpp | 208 + .../variant.assign/move.pass.cpp | 197 + .../variant.ctor/copy.pass.cpp | 120 + .../variant.ctor/move.pass.cpp | 153 + .../libcxx/utilities/variant/version.pass.cpp | 20 + test/lit.cfg | 9 +- test/lit.site.cfg.in | 6 +- .../alg.fill/fill_n.pass.cpp | 2 +- .../alg.move/move.pass.cpp | 2 +- .../alg.move/move_backward.pass.cpp | 2 +- .../alg.partitions/is_partitioned.pass.cpp | 112 +- .../alg.random.sample/sample.fail.cpp | 41 + .../alg.random.sample/sample.pass.cpp | 160 + .../alg.random.sample/sample.stable.pass.cpp | 55 + .../random_shuffle.pass.cpp | 8 +- .../random_shuffle_rand.pass.cpp | 8 +- .../random_shuffle_urng.pass.cpp | 10 +- .../alg.rotate/rotate.pass.cpp | 35 +- .../alg.nonmodifying/alg.equal/equal.pass.cpp | 8 +- .../alg.equal/equal_pred.pass.cpp | 9 +- .../alg.foreach/test.pass.cpp | 2 +- .../is_permutation.pass.cpp | 80 +- .../is_permutation_pred.pass.cpp | 79 +- .../mismatch/mismatch_pred.pass.cpp | 4 +- .../binary.search/binary_search.pass.cpp | 5 +- .../binary.search/binary_search_comp.pass.cpp | 5 +- .../equal.range/equal_range.pass.cpp | 5 +- .../equal.range/equal_range_comp.pass.cpp | 5 +- .../lower.bound/lower_bound.pass.cpp | 5 +- .../lower.bound/lower_bound_comp.pass.cpp | 5 +- .../upper.bound/upper_bound.pass.cpp | 5 +- .../upper.bound/upper_bound_comp.pass.cpp | 5 +- .../alg.sorting/alg.clamp/clamp.comp.pass.cpp | 4 +- .../alg.sorting/alg.clamp/clamp.pass.cpp | 4 +- .../make.heap/make_heap.pass.cpp | 2 +- .../make.heap/make_heap_comp.pass.cpp | 18 +- .../pop.heap/pop_heap.pass.cpp | 2 +- .../pop.heap/pop_heap_comp.pass.cpp | 2 +- .../push.heap/push_heap.pass.cpp | 2 +- .../push.heap/push_heap_comp.pass.cpp | 2 +- .../sort.heap/sort_heap.pass.cpp | 2 +- .../sort.heap/sort_heap_comp.pass.cpp | 2 +- .../alg.merge/inplace_merge.pass.cpp | 2 +- .../alg.merge/inplace_merge_comp.pass.cpp | 6 +- .../alg.sorting/alg.merge/merge.pass.cpp | 4 +- .../alg.sorting/alg.merge/merge_comp.pass.cpp | 4 +- .../alg.sorting/alg.min.max/max.pass.cpp | 4 +- .../alg.sorting/alg.min.max/max_comp.pass.cpp | 4 +- .../alg.min.max/max_element.pass.cpp | 2 +- .../alg.min.max/max_element_comp.pass.cpp | 5 +- .../alg.min.max/max_init_list.pass.cpp | 8 +- .../alg.min.max/max_init_list_comp.pass.cpp | 8 +- .../alg.sorting/alg.min.max/min.pass.cpp | 4 +- .../alg.sorting/alg.min.max/min_comp.pass.cpp | 4 +- .../alg.min.max/min_element.pass.cpp | 2 +- .../alg.min.max/min_element_comp.pass.cpp | 5 +- .../alg.min.max/min_init_list.pass.cpp | 8 +- .../alg.min.max/min_init_list_comp.pass.cpp | 8 +- .../alg.sorting/alg.min.max/minmax.pass.cpp | 4 +- .../alg.min.max/minmax_comp.pass.cpp | 4 +- .../alg.min.max/minmax_element.pass.cpp | 4 +- .../alg.min.max/minmax_element_comp.pass.cpp | 5 +- .../alg.min.max/minmax_init_list.pass.cpp | 8 +- .../minmax_init_list_comp.pass.cpp | 9 +- .../alg.nth.element/nth_element.pass.cpp | 4 +- .../alg.nth.element/nth_element_comp.pass.cpp | 9 +- .../partial_sort_copy.pass.cpp | 4 +- .../partial_sort_copy_comp.pass.cpp | 4 +- .../partial.sort/partial_sort.pass.cpp | 4 +- .../partial.sort/partial_sort_comp.pass.cpp | 9 +- .../alg.sorting/alg.sort/sort/sort.pass.cpp | 11 +- .../alg.sort/sort/sort_comp.pass.cpp | 5 +- .../alg.sort/stable.sort/stable_sort.pass.cpp | 11 +- .../stable.sort/stable_sort_comp.pass.cpp | 3 +- .../std/atomics/atomics.flag/default.pass.cpp | 4 +- .../atomics.types.generic/address.pass.cpp | 4 +- .../atomics.types.generic/bool.pass.cpp | 4 +- .../atomics.types.generic/integral.pass.cpp | 6 +- .../associative/map/map.access/at.pass.cpp | 10 +- .../map/map.access/iterator.pass.cpp | 36 +- .../map/map.access/max_size.pass.cpp | 38 +- .../compare_copy_constructible.fail.cpp | 2 +- .../associative/map/map.cons/copy.pass.cpp | 5 +- .../map/map.cons/copy_assign.pass.cpp | 13 +- .../map/map.cons/dtor_noexcept.pass.cpp | 3 +- .../map.cons/iter_iter_comp_alloc.pass.cpp | 3 +- .../map.cons/move_assign_noexcept.pass.cpp | 3 +- .../map/map.cons/move_noexcept.pass.cpp | 7 +- .../associative/map/map.ops/count.pass.cpp | 3 +- .../associative/map/map.ops/count1.fail.cpp | 5 +- .../associative/map/map.ops/count2.fail.cpp | 5 +- .../associative/map/map.ops/count3.fail.cpp | 5 +- .../map/map.ops/equal_range.pass.cpp | 3 +- .../map/map.ops/equal_range1.fail.cpp | 5 +- .../map/map.ops/equal_range2.fail.cpp | 5 +- .../map/map.ops/equal_range3.fail.cpp | 5 +- .../associative/map/map.ops/find.pass.cpp | 3 +- .../associative/map/map.ops/find1.fail.cpp | 5 +- .../associative/map/map.ops/find2.fail.cpp | 5 +- .../associative/map/map.ops/find3.fail.cpp | 5 +- .../map/map.ops/lower_bound.pass.cpp | 3 +- .../map/map.ops/lower_bound1.fail.cpp | 3 +- .../map/map.ops/lower_bound2.fail.cpp | 3 +- .../map/map.ops/lower_bound3.fail.cpp | 3 +- .../map/map.ops/upper_bound.pass.cpp | 3 +- .../map/map.ops/upper_bound1.fail.cpp | 3 +- .../map/map.ops/upper_bound2.fail.cpp | 3 +- .../map/map.ops/upper_bound3.fail.cpp | 3 +- .../map/map.special/non_member_swap.pass.cpp | 8 +- .../map/map.special/swap_noexcept.pass.cpp | 28 +- .../associative/multimap/iterator.pass.cpp | 28 +- .../associative/multimap/max_size.pass.cpp | 38 +- .../compare_copy_constructible.fail.cpp | 2 +- .../multimap/multimap.cons/copy.pass.cpp | 5 +- .../multimap.cons/dtor_noexcept.pass.cpp | 3 +- .../multimap/multimap.cons/iter_iter.pass.cpp | 3 +- .../move_assign_noexcept.pass.cpp | 3 +- .../multimap.cons/move_noexcept.pass.cpp | 7 +- .../multimap/multimap.ops/count.pass.cpp | 3 +- .../multimap/multimap.ops/count1.fail.cpp | 5 +- .../multimap/multimap.ops/count2.fail.cpp | 5 +- .../multimap/multimap.ops/count3.fail.cpp | 5 +- .../multimap.ops/equal_range.pass.cpp | 3 +- .../multimap.ops/equal_range1.fail.cpp | 5 +- .../multimap.ops/equal_range2.fail.cpp | 5 +- .../multimap.ops/equal_range3.fail.cpp | 5 +- .../multimap/multimap.ops/find.pass.cpp | 3 +- .../multimap/multimap.ops/find1.fail.cpp | 5 +- .../multimap/multimap.ops/find2.fail.cpp | 5 +- .../multimap/multimap.ops/find3.fail.cpp | 5 +- .../multimap.ops/lower_bound.pass.cpp | 3 +- .../multimap.ops/lower_bound1.fail.cpp | 3 +- .../multimap.ops/lower_bound2.fail.cpp | 3 +- .../multimap.ops/lower_bound3.fail.cpp | 3 +- .../multimap.ops/upper_bound.pass.cpp | 3 +- .../multimap.ops/upper_bound1.fail.cpp | 3 +- .../multimap.ops/upper_bound2.fail.cpp | 3 +- .../multimap.ops/upper_bound3.fail.cpp | 3 +- .../multimap.special/non_member_swap.pass.cpp | 8 +- .../multimap.special/swap_noexcept.pass.cpp | 30 +- .../associative/multiset/count.pass.cpp | 3 +- .../associative/multiset/equal_range.pass.cpp | 3 +- .../associative/multiset/find.pass.cpp | 3 +- .../multiset/insert_initializer_list.pass.cpp | 5 +- .../associative/multiset/iterator.pass.cpp | 28 +- .../associative/multiset/lower_bound.pass.cpp | 3 +- .../associative/multiset/max_size.pass.cpp | 35 +- .../compare_copy_constructible.fail.cpp | 2 +- .../multiset/multiset.cons/copy.pass.cpp | 5 +- .../multiset.cons/dtor_noexcept.pass.cpp | 3 +- .../multiset.cons/initializer_list.pass.cpp | 3 +- .../multiset.cons/iter_iter_alloc.pass.cpp | 3 +- .../move_assign_noexcept.pass.cpp | 3 +- .../multiset.cons/move_noexcept.pass.cpp | 7 +- .../multiset.special/non_member_swap.pass.cpp | 8 +- .../multiset.special/swap_noexcept.pass.cpp | 28 +- .../associative/multiset/upper_bound.pass.cpp | 3 +- .../containers/associative/set/count.pass.cpp | 23 +- .../associative/set/equal_range.pass.cpp | 3 +- .../containers/associative/set/find.pass.cpp | 3 +- .../set/insert_initializer_list.pass.cpp | 5 +- .../associative/set/iterator.pass.cpp | 36 +- .../associative/set/lower_bound.pass.cpp | 3 +- .../associative/set/max_size.pass.cpp | 35 +- .../compare_copy_constructible.fail.cpp | 2 +- .../associative/set/set.cons/copy.pass.cpp | 5 +- .../set/set.cons/dtor_noexcept.pass.cpp | 3 +- .../initializer_list_compare_alloc.pass.cpp | 3 +- .../set/set.cons/iter_iter_alloc.pass.cpp | 3 +- .../set.cons/move_assign_noexcept.pass.cpp | 3 +- .../set/set.cons/move_noexcept.pass.cpp | 7 +- .../set/set.special/non_member_swap.pass.cpp | 8 +- .../set/set.special/swap_noexcept.pass.cpp | 28 +- .../associative/set/upper_bound.pass.cpp | 3 +- .../priqueue.cons/ctor_comp.pass.cpp | 4 +- .../priqueue.cons/ctor_default.pass.cpp | 4 +- .../priqueue.cons/ctor_iter_iter.pass.cpp | 3 +- .../ctor_iter_iter_comp.pass.cpp | 3 +- .../priqueue.special/swap_noexcept.pass.cpp | 4 +- .../ctor_container_alloc.pass.cpp | 3 +- .../queue/queue.cons/ctor_container.pass.cpp | 3 +- .../queue/queue.cons/ctor_default.pass.cpp | 4 +- .../queue/queue.cons/move_noexcept.pass.cpp | 3 +- .../queue/queue.defn/emplace.pass.cpp | 18 +- .../queue.special/swap_noexcept.pass.cpp | 4 +- .../ctor_container_alloc.pass.cpp | 3 +- .../stack/stack.cons/ctor_container.pass.cpp | 3 +- .../stack/stack.cons/ctor_default.pass.cpp | 4 +- .../stack/stack.cons/move_noexcept.pass.cpp | 3 +- .../stack/stack.defn/emplace.pass.cpp | 16 +- .../stack.special/swap_noexcept.pass.cpp | 4 +- .../sequences/array/array.tuple/get.fail.cpp | 5 - .../containers/sequences/array/at.pass.cpp | 17 +- .../sequences/array/iterators.pass.cpp | 4 +- .../deque/deque.capacity/access.pass.cpp | 16 +- .../deque/deque.capacity/max_size.pass.cpp | 47 + .../deque/deque.capacity/resize_size.pass.cpp | 9 +- .../deque.capacity/resize_size_value.pass.cpp | 9 +- .../deque.cons/assign_iter_iter.pass.cpp | 5 +- .../deque.cons/assign_size_value.pass.cpp | 5 +- .../sequences/deque/deque.cons/copy.pass.cpp | 6 +- .../deque/deque.cons/default.pass.cpp | 4 +- .../deque/deque.cons/dtor_noexcept.pass.cpp | 3 +- .../deque/deque.cons/iter_iter.pass.cpp | 13 +- .../deque/deque.cons/iter_iter_alloc.pass.cpp | 5 +- .../deque.cons/move_assign_noexcept.pass.cpp | 5 +- .../deque/deque.cons/move_noexcept.pass.cpp | 7 +- .../sequences/deque/deque.cons/size.pass.cpp | 31 +- .../deque/deque.cons/size_value.pass.cpp | 7 +- .../deque.cons/size_value_alloc.pass.cpp | 3 +- .../deque/deque.modifiers/emplace.pass.cpp | 3 +- .../deque.modifiers/emplace_back.pass.cpp | 21 +- .../deque.modifiers/emplace_front.pass.cpp | 20 +- .../deque/deque.modifiers/erase_iter.pass.cpp | 7 +- .../deque.modifiers/erase_iter_iter.pass.cpp | 7 +- .../deque.modifiers/insert_iter_iter.pass.cpp | 29 +- .../deque.modifiers/insert_rvalue.pass.cpp | 5 +- .../insert_size_value.pass.cpp | 7 +- .../deque.modifiers/insert_value.pass.cpp | 7 +- .../deque/deque.modifiers/pop_back.pass.cpp | 5 +- .../deque/deque.modifiers/pop_front.pass.cpp | 5 +- .../push_back_exception_safety.pass.cpp | 2 +- .../deque/deque.modifiers/push_front.pass.cpp | 5 +- .../push_front_exception_safety.pass.cpp | 2 +- .../push_front_rvalue.pass.cpp | 5 +- .../deque/deque.special/swap.pass.cpp | 8 +- .../deque.special/swap_noexcept.pass.cpp | 18 +- .../sequences/deque/iterators.pass.cpp | 3 +- .../forwardlist.cons/copy.pass.cpp | 11 +- .../forwardlist.cons/copy_alloc.pass.cpp | 6 +- .../forwardlist.cons/dtor_noexcept.pass.cpp | 3 +- .../forwardlist.cons/init.pass.cpp | 4 +- .../forwardlist.cons/init_alloc.pass.cpp | 4 +- .../forwardlist.cons/move.pass.cpp | 6 +- .../move_assign_noexcept.pass.cpp | 5 +- .../forwardlist.cons/move_noexcept.pass.cpp | 7 +- .../forwardlist.cons/range.pass.cpp | 4 +- .../forwardlist.cons/range_alloc.pass.cpp | 4 +- .../forwardlist.cons/size.pass.cpp | 21 +- .../forwardlist.iter/iterators.pass.cpp | 3 +- .../emplace_front.pass.cpp | 20 +- .../push_front_exception_safety.pass.cpp | 2 +- .../forwardlist.ops/remove_if.pass.cpp | 17 +- .../splice_after_flist.pass.cpp | 5 +- .../forwardlist.ops/splice_after_one.pass.cpp | 5 +- .../forwardlist.spec/member_swap.pass.cpp | 32 +- .../forwardlist.spec/non_member_swap.pass.cpp | 32 +- .../forwardlist.spec/swap_noexcept.pass.cpp | 18 +- .../sequences/forwardlist/max_size.pass.cpp | 37 +- .../sequences/list/iterators.pass.cpp | 7 +- .../list/list.capacity/max_size.pass.cpp | 47 + .../sequences/list/list.cons/copy.pass.cpp | 6 +- .../list.cons/default_stack_alloc.pass.cpp | 4 +- .../list/list.cons/dtor_noexcept.pass.cpp | 3 +- .../list.cons/initializer_list_alloc.pass.cpp | 2 +- .../list/list.cons/input_iterator.pass.cpp | 5 +- .../list.cons/move_assign_noexcept.pass.cpp | 5 +- .../list/list.cons/move_noexcept.pass.cpp | 7 +- .../list/list.cons/size_type.pass.cpp | 22 +- .../list/list.cons/size_value_alloc.pass.cpp | 5 +- .../list/list.modifiers/emplace_back.pass.cpp | 20 +- .../list.modifiers/emplace_front.pass.cpp | 20 +- .../insert_iter_size_value.pass.cpp | 4 +- .../push_back_exception_safety.pass.cpp | 2 +- .../push_front_exception_safety.pass.cpp | 2 +- .../sequences/list/list.ops/remove.pass.cpp | 82 +- .../list/list.special/swap_noexcept.pass.cpp | 18 +- .../vector.bool/construct_iter_iter.pass.cpp | 3 +- .../construct_iter_iter_alloc.pass.cpp | 3 +- .../vector.bool/construct_size.pass.cpp | 3 + .../sequences/vector.bool/copy.pass.cpp | 2 +- .../sequences/vector.bool/copy_alloc.pass.cpp | 2 +- .../vector.bool/dtor_noexcept.pass.cpp | 3 +- .../vector.bool/emplace_back.pass.cpp | 29 +- .../sequences/vector.bool/find.pass.cpp | 5 +- .../insert_iter_iter_iter.pass.cpp | 25 +- .../insert_iter_size_value.pass.cpp | 9 +- .../vector.bool/insert_iter_value.pass.cpp | 9 +- .../sequences/vector.bool/iterators.pass.cpp | 3 +- .../vector.bool/move_assign_noexcept.pass.cpp | 9 +- .../vector.bool/move_noexcept.pass.cpp | 9 +- .../sequences/vector.bool/push_back.pass.cpp | 5 +- .../sequences/vector.bool/swap.pass.cpp | 8 +- .../vector.bool/swap_noexcept.pass.cpp | 18 +- .../sequences/vector/contiguous.pass.cpp | 2 +- .../sequences/vector/iterators.pass.cpp | 3 +- .../vector/vector.capacity/max_size.pass.cpp | 48 + .../vector/vector.capacity/reserve.pass.cpp | 5 +- .../vector.capacity/resize_size.pass.cpp | 8 +- .../resize_size_value.pass.cpp | 5 +- .../vector.capacity/shrink_to_fit.pass.cpp | 6 +- .../vector.cons/construct_default.pass.cpp | 4 +- .../vector.cons/construct_iter_iter.pass.cpp | 16 +- .../construct_iter_iter_alloc.pass.cpp | 8 +- .../vector.cons/construct_size.pass.cpp | 3 + .../vector.cons/construct_size_value.pass.cpp | 5 +- .../vector/vector.cons/copy.pass.cpp | 2 +- .../vector/vector.cons/copy_alloc.pass.cpp | 2 +- .../vector/vector.cons/dtor_noexcept.pass.cpp | 3 +- .../vector/vector.data/data.pass.cpp | 2 +- .../vector/vector.data/data_const.pass.cpp | 2 +- .../vector/vector.modifiers/emplace.pass.cpp | 38 +- .../vector.modifiers/emplace_back.pass.cpp | 34 +- .../vector.modifiers/erase_iter_db1.pass.cpp | 51 - .../vector.modifiers/erase_iter_db2.pass.cpp | 53 - .../erase_iter_iter_db1.pass.cpp | 51 - .../erase_iter_iter_db2.pass.cpp | 51 - .../erase_iter_iter_db3.pass.cpp | 51 - .../erase_iter_iter_db4.pass.cpp | 49 - .../insert_iter_iter_iter.pass.cpp | 55 +- .../insert_iter_rvalue.pass.cpp | 34 +- .../insert_iter_size_value.pass.cpp | 33 +- .../insert_iter_value.pass.cpp | 35 +- .../vector/vector.modifiers/pop_back.pass.cpp | 22 +- .../vector.modifiers/push_back.pass.cpp | 38 +- .../push_back_exception_safety.pass.cpp | 14 +- .../push_back_rvalue.pass.cpp | 38 +- .../vector/vector.special/db_swap_1.pass.cpp | 56 - .../vector/vector.special/swap.pass.cpp | 14 +- .../vector.special/swap_noexcept.pass.cpp | 18 +- test/std/containers/stack_allocator.h | 66 - .../unord/unord.map/bucket.pass.cpp | 5 +- .../unord/unord.map/bucket_count.pass.cpp | 8 +- .../unord/unord.map/bucket_size.pass.cpp | 21 +- .../unord/unord.map/iterators.pass.cpp | 20 +- .../unord/unord.map/max_size.pass.cpp | 41 +- .../unord/unord.map/rehash.pass.cpp | 13 +- .../unord/unord.map/reserve.pass.cpp | 5 +- .../unord/unord.map/swap_member.pass.cpp | 177 +- .../unord.map.cnstr/allocator.pass.cpp | 9 +- .../unord.map.cnstr/assign_copy.pass.cpp | 18 +- .../unord.map.cnstr/assign_init.pass.cpp | 9 +- .../unord.map.cnstr/assign_move.pass.cpp | 26 +- .../compare_copy_constructible.fail.cpp | 2 +- .../unord.map/unord.map.cnstr/copy.pass.cpp | 24 +- .../unord.map.cnstr/copy_alloc.pass.cpp | 18 +- .../unord.map.cnstr/default.pass.cpp | 7 +- .../unord.map.cnstr/dtor_noexcept.pass.cpp | 5 +- .../hash_copy_constructible.fail.cpp | 2 +- .../unord.map/unord.map.cnstr/init.pass.cpp | 20 +- .../unord.map.cnstr/init_size.pass.cpp | 14 +- .../unord.map.cnstr/init_size_hash.pass.cpp | 14 +- .../init_size_hash_equal.pass.cpp | 14 +- .../init_size_hash_equal_allocator.pass.cpp | 18 +- .../unord.map/unord.map.cnstr/move.pass.cpp | 26 +- .../unord.map.cnstr/move_alloc.pass.cpp | 22 +- .../move_assign_noexcept.pass.cpp | 3 +- .../unord.map.cnstr/move_noexcept.pass.cpp | 7 +- .../unord.map/unord.map.cnstr/range.pass.cpp | 20 +- .../unord.map.cnstr/range_size.pass.cpp | 14 +- .../unord.map.cnstr/range_size_hash.pass.cpp | 14 +- .../range_size_hash_equal.pass.cpp | 14 +- .../range_size_hash_equal_allocator.pass.cpp | 18 +- .../unord.map/unord.map.cnstr/size.fail.cpp | 5 +- .../unord.map/unord.map.cnstr/size.pass.cpp | 5 +- .../unord.map.cnstr/size_hash.pass.cpp | 5 +- .../unord.map.cnstr/size_hash_equal.pass.cpp | 5 +- .../size_hash_equal_allocator.pass.cpp | 5 +- .../unord.map/unord.map.elem/at.pass.cpp | 10 +- .../insert_hint_rvalue.pass.cpp | 16 +- .../insert_rvalue.pass.cpp | 16 +- .../unord.map.swap/swap_noexcept.pass.cpp | 43 +- .../unord.map.swap/swap_non_member.pass.cpp | 177 +- .../unord/unord.multimap/bucket.pass.cpp | 5 +- .../unord.multimap/bucket_count.pass.cpp | 6 +- .../unord/unord.multimap/bucket_size.pass.cpp | 29 +- .../unord/unord.multimap/iterators.fail.cpp | 6 +- .../unord/unord.multimap/iterators.pass.cpp | 20 +- .../unord.multimap/local_iterators.fail.cpp | 10 +- .../unord/unord.multimap/max_size.pass.cpp | 43 +- .../unord/unord.multimap/rehash.pass.cpp | 18 +- .../unord/unord.multimap/reserve.pass.cpp | 9 +- .../unord/unord.multimap/scary.pass.cpp | 1 + .../unord/unord.multimap/swap_member.pass.cpp | 178 +- .../unord.multimap.cnstr/allocator.pass.cpp | 11 +- .../unord.multimap.cnstr/assign_copy.pass.cpp | 18 +- .../unord.multimap.cnstr/assign_init.pass.cpp | 9 +- .../unord.multimap.cnstr/assign_move.pass.cpp | 26 +- .../compare_copy_constructible.fail.cpp | 2 +- .../unord.multimap.cnstr/copy.pass.cpp | 24 +- .../unord.multimap.cnstr/copy_alloc.pass.cpp | 18 +- .../unord.multimap.cnstr/default.pass.cpp | 7 +- .../dtor_noexcept.pass.cpp | 5 +- .../hash_copy_constructible.fail.cpp | 2 +- .../unord.multimap.cnstr/init.pass.cpp | 20 +- .../unord.multimap.cnstr/init_size.pass.cpp | 14 +- .../init_size_hash.pass.cpp | 14 +- .../init_size_hash_equal.pass.cpp | 14 +- .../init_size_hash_equal_allocator.pass.cpp | 18 +- .../unord.multimap.cnstr/move.pass.cpp | 53 +- .../unord.multimap.cnstr/move_alloc.pass.cpp | 22 +- .../move_assign_noexcept.pass.cpp | 3 +- .../move_noexcept.pass.cpp | 7 +- .../unord.multimap.cnstr/range.pass.cpp | 20 +- .../unord.multimap.cnstr/range_size.pass.cpp | 14 +- .../range_size_hash.pass.cpp | 14 +- .../range_size_hash_equal.pass.cpp | 14 +- .../range_size_hash_equal_allocator.pass.cpp | 20 +- .../unord.multimap.cnstr/size.fail.cpp | 5 +- .../unord.multimap.cnstr/size.pass.cpp | 5 +- .../unord.multimap.cnstr/size_hash.pass.cpp | 5 +- .../size_hash_equal.pass.cpp | 5 +- .../size_hash_equal_allocator.pass.cpp | 5 +- .../emplace_hint.pass.cpp | 17 +- .../erase_const_iter.pass.cpp | 15 +- .../erase_key.pass.cpp | 73 +- .../erase_range.pass.cpp | 17 +- .../insert_hint_rvalue.pass.cpp | 16 +- .../insert_init.pass.cpp | 9 +- .../insert_range.pass.cpp | 9 +- .../insert_rvalue.pass.cpp | 16 +- .../swap_noexcept.pass.cpp | 43 +- .../swap_non_member.pass.cpp | 178 +- .../unord/unord.multiset/bucket.pass.cpp | 5 +- .../unord.multiset/bucket_count.pass.cpp | 9 +- .../unord/unord.multiset/bucket_size.pass.cpp | 29 +- .../unord.multiset/erase_const_iter.pass.cpp | 7 + .../unord/unord.multiset/iterators.fail.cpp | 6 +- .../unord/unord.multiset/iterators.pass.cpp | 20 +- .../unord.multiset/local_iterators.fail.cpp | 10 +- .../unord/unord.multiset/max_size.pass.cpp | 40 +- .../unord/unord.multiset/rehash.pass.cpp | 13 +- .../unord/unord.multiset/reserve.pass.cpp | 9 +- .../unord/unord.multiset/scary.pass.cpp | 1 + .../unord/unord.multiset/swap_member.pass.cpp | 178 +- .../unord.multiset.cnstr/allocator.pass.cpp | 11 +- .../unord.multiset.cnstr/assign_copy.pass.cpp | 18 +- .../unord.multiset.cnstr/assign_init.pass.cpp | 9 +- .../unord.multiset.cnstr/assign_move.pass.cpp | 48 +- .../compare_copy_constructible.fail.cpp | 2 +- .../unord.multiset.cnstr/copy.pass.cpp | 24 +- .../unord.multiset.cnstr/copy_alloc.pass.cpp | 14 +- .../unord.multiset.cnstr/default.pass.cpp | 7 +- .../dtor_noexcept.pass.cpp | 5 +- .../hash_copy_constructible.fail.cpp | 2 +- .../unord.multiset.cnstr/init.pass.cpp | 20 +- .../unord.multiset.cnstr/init_size.pass.cpp | 14 +- .../init_size_hash.pass.cpp | 14 +- .../init_size_hash_equal.pass.cpp | 14 +- .../init_size_hash_equal_allocator.pass.cpp | 14 +- .../unord.multiset.cnstr/move.pass.cpp | 52 +- .../unord.multiset.cnstr/move_alloc.pass.cpp | 38 +- .../move_assign_noexcept.pass.cpp | 3 +- .../move_noexcept.pass.cpp | 7 +- .../unord.multiset.cnstr/range.pass.cpp | 20 +- .../unord.multiset.cnstr/range_size.pass.cpp | 14 +- .../range_size_hash.pass.cpp | 14 +- .../range_size_hash_equal.pass.cpp | 14 +- .../range_size_hash_equal_allocator.pass.cpp | 14 +- .../unord.multiset.cnstr/size.fail.cpp | 5 +- .../unord.multiset.cnstr/size.pass.cpp | 5 +- .../unord.multiset.cnstr/size_hash.pass.cpp | 5 +- .../size_hash_equal.pass.cpp | 5 +- .../size_hash_equal_allocator.pass.cpp | 5 +- .../swap_noexcept.pass.cpp | 43 +- .../swap_non_member.pass.cpp | 178 +- .../unord/unord.set/bucket.pass.cpp | 5 +- .../unord/unord.set/bucket_count.pass.cpp | 9 +- .../unord/unord.set/bucket_size.pass.cpp | 21 +- .../unord/unord.set/erase_const_iter.pass.cpp | 8 + .../unord/unord.set/iterators.pass.cpp | 20 +- .../unord/unord.set/max_size.pass.cpp | 36 +- .../unord/unord.set/rehash.pass.cpp | 13 +- .../unord/unord.set/reserve.pass.cpp | 5 +- .../unord/unord.set/swap_member.pass.cpp | 178 +- .../unord.set.cnstr/allocator.pass.cpp | 11 +- .../unord.set.cnstr/assign_copy.pass.cpp | 18 +- .../unord.set.cnstr/assign_init.pass.cpp | 9 +- .../unord.set.cnstr/assign_move.pass.cpp | 26 +- .../compare_copy_constructible.fail.cpp | 2 +- .../unord.set/unord.set.cnstr/copy.pass.cpp | 24 +- .../unord.set.cnstr/copy_alloc.pass.cpp | 14 +- .../unord.set.cnstr/default.pass.cpp | 7 +- .../unord.set.cnstr/dtor_noexcept.pass.cpp | 5 +- .../hash_copy_constructible.fail.cpp | 2 +- .../unord.set/unord.set.cnstr/init.pass.cpp | 20 +- .../unord.set.cnstr/init_size.pass.cpp | 14 +- .../unord.set.cnstr/init_size_hash.pass.cpp | 14 +- .../init_size_hash_equal.pass.cpp | 14 +- .../init_size_hash_equal_allocator.pass.cpp | 14 +- .../unord.set/unord.set.cnstr/move.pass.cpp | 52 +- .../unord.set.cnstr/move_alloc.pass.cpp | 13 +- .../move_assign_noexcept.pass.cpp | 3 +- .../unord.set.cnstr/move_noexcept.pass.cpp | 7 +- .../unord.set/unord.set.cnstr/range.pass.cpp | 20 +- .../unord.set.cnstr/range_size.pass.cpp | 14 +- .../unord.set.cnstr/range_size_hash.pass.cpp | 14 +- .../range_size_hash_equal.pass.cpp | 14 +- .../range_size_hash_equal_allocator.pass.cpp | 14 +- .../unord.set/unord.set.cnstr/size.fail.cpp | 3 +- .../unord.set/unord.set.cnstr/size.pass.cpp | 5 +- .../unord.set.cnstr/size_hash.pass.cpp | 5 +- .../unord.set.cnstr/size_hash_equal.pass.cpp | 5 +- .../size_hash_equal_allocator.pass.cpp | 5 +- .../unord.set.swap/swap_noexcept.pass.cpp | 43 +- .../unord.set.swap/swap_non_member.pass.cpp | 178 +- test/std/depr/depr.c.headers/ciso646.pass.cpp | 4 - .../depr/depr.c.headers/complex.h.pass.cpp | 4 - .../depr/depr.c.headers/inttypes_h.pass.cpp | 86 +- .../std/depr/depr.c.headers/stdlib_h.pass.cpp | 2 - .../std/depr/depr.c.headers/tgmath_h.pass.cpp | 4 - .../syserr/is_error_code_enum.pass.cpp | 51 + .../syserr/is_error_condition_enum.pass.cpp | 51 + .../syserr/syserr.hash/error_code.pass.cpp | 2 +- .../syserr.hash/error_condition.pass.cpp | 44 + .../alg.random.sample/sample.fail.cpp | 5 + .../alg.random.sample/sample.pass.cpp | 18 +- .../any/any.class/any.assign/copy.pass.cpp | 2 +- .../any/any.class/any.assign/move.pass.cpp | 2 +- .../any/any.class/any.assign/value.pass.cpp | 2 +- .../any/any.class/any.cons/copy.pass.cpp | 2 +- .../any/any.class/any.cons/default.pass.cpp | 2 +- .../any/any.class/any.cons/move.pass.cpp | 2 +- .../any/any.class/any.cons/value.pass.cpp | 2 +- .../any.class/any.modifiers/clear.pass.cpp | 2 +- .../any/any.class/any.modifiers/swap.pass.cpp | 2 +- .../any.class/any.observers/empty.pass.cpp | 2 +- .../any/any.class/any.observers/type.pass.cpp | 2 +- .../any.cast/any_cast_pointer.pass.cpp | 2 +- .../any.cast/any_cast_reference.pass.cpp | 5 +- .../directory_iterator.members/ctor.pass.cpp | 7 +- .../path.member/path.append.pass.cpp | 83 + .../path.member/path.assign/source.pass.cpp | 71 + .../path.member/path.compare.pass.cpp | 18 +- .../path.member/path.concat.pass.cpp | 116 +- .../path.construct/source.pass.cpp | 39 + .../path.member/path.modifiers/clear.pass.cpp | 2 +- .../path.modifiers/remove_filename.pass.cpp | 8 + .../path.native.obs/c_str.pass.cpp | 2 +- .../path.native.obs/native.pass.cpp | 2 +- .../path.native.obs/operator_string.pass.cpp | 2 +- .../path.nonmember/path.io.pass.cpp | 1 - .../rec.dir.itr.members/ctor.pass.cpp | 6 +- .../fs.op.funcs/fs.op.copy/copy.pass.cpp | 79 +- .../fs.op.copy_file/copy_file.pass.cpp | 30 +- .../fs.op.copy_symlink/copy_symlink.pass.cpp | 1 + .../create_directory_symlink.pass.cpp | 15 - .../create_hard_link.pass.cpp | 15 - .../create_symlink.pass.cpp | 15 - .../fs.op.hard_lk_ct/hard_link_count.pass.cpp | 25 +- .../fs.op.is_empty/is_empty.pass.cpp | 29 + .../fs.op.permissions/permissions.pass.cpp | 6 +- .../fs.op.read_symlink/read_symlink.pass.cpp | 1 + .../fs.op.funcs/fs.op.remove/remove.pass.cpp | 1 + .../fs.op.remove_all/remove_all.pass.cpp | 1 + .../fs.op.funcs/fs.op.rename/rename.pass.cpp | 1 + .../fs.op.resize_file/resize_file.pass.cpp | 1 + .../fs.op.funcs/fs.op.space/space.pass.cpp | 1 + .../temp_directory_path.pass.cpp | 19 +- .../func.searchers.boyer_moore/hash.pass.cpp | 2 +- .../hash.pred.pass.cpp | 9 +- .../func.searchers.boyer_moore/pred.pass.cpp | 4 +- .../hash.pass.cpp | 2 +- .../hash.pred.pass.cpp | 2 + .../pred.pass.cpp | 2 +- .../construct_pair_const_lvalue_pair.pass.cpp | 5 + .../construct_pair_rvalue.pass.cpp | 5 + .../construct_pair_values.pass.cpp | 5 + .../construct_piecewise_pair.pass.cpp | 4 + .../construct_types.pass.cpp | 4 + .../memory.resource.public/allocate.pass.cpp | 4 +- .../nothing_to_do.pass.cpp | 15 + .../numeric.ops/nothing_to_do.pass.cpp | 15 + .../gcd.not_integral1.fail.cpp | 24 + .../gcd.not_integral2.fail.cpp | 24 + .../numeric.ops/numeric.ops.gcd/gcd.pass.cpp | 132 + .../lcm.not_integral1.fail.cpp | 24 + .../lcm.not_integral2.fail.cpp | 24 + .../numeric.ops/numeric.ops.lcm/lcm.pass.cpp | 131 + .../optional.nullops/less_equal.pass.cpp | 4 +- .../assign_value.pass.cpp | 13 + .../optional.object.assign/copy.pass.cpp | 19 +- .../optional.object.assign/emplace.pass.cpp | 13 +- .../emplace_initializer_list.pass.cpp | 18 +- .../optional.object.assign/move.pass.cpp | 23 +- .../optional.object.ctor/const_T.pass.cpp | 7 +- .../optional.object.ctor/copy.pass.cpp | 23 +- .../optional.object.ctor/in_place_t.pass.cpp | 6 +- .../initializer_list.pass.cpp | 7 +- .../optional.object.ctor/move.pass.cpp | 34 +- .../optional.object.ctor/rvalue_T.pass.cpp | 7 +- .../op_arrow_const.pass.cpp | 3 + .../optional.object.observe/value.pass.cpp | 5 +- .../value_const.pass.cpp | 5 +- .../optional.object.swap/swap.pass.cpp | 18 +- .../optional/optional.specalg/swap.pass.cpp | 9 +- .../string.view.access/data.pass.cpp | 2 +- .../string.view.access/index.pass.cpp | 2 +- .../string.view.capacity/capacity.pass.cpp | 2 +- .../opeq.string_view.pointer.pass.cpp | 3 +- .../opeq.string_view.string_view.pass.cpp | 3 +- .../opge.string_view.pointer.pass.cpp | 3 +- .../opge.string_view.string_view.pass.cpp | 3 +- .../opgt.string_view.pointer.pass.cpp | 3 +- .../opgt.string_view.string_view.pass.cpp | 3 +- .../ople.string_view.pointer.pass.cpp | 3 +- .../ople.string_view.string_view.pass.cpp | 3 +- .../oplt.string_view.pointer.pass.cpp | 3 +- .../oplt.string_view.string_view.pass.cpp | 3 +- .../opne.string_view.pointer.pass.cpp | 3 +- .../opne.string_view.string_view.pass.cpp | 3 +- .../string.view.cons/default.pass.cpp | 4 +- .../string.view.cons/from_literal.pass.cpp | 3 +- .../string.view.cons/from_ptr_len.pass.cpp | 8 +- .../string.view.find/find_char_size.pass.cpp | 3 +- .../find_first_not_of_char_size.pass.cpp | 3 +- .../find_first_not_of_pointer_size.pass.cpp | 3 +- ...nd_first_not_of_pointer_size_size.pass.cpp | 3 +- .../find_first_of_char_size.pass.cpp | 3 +- .../find_first_of_pointer_size.pass.cpp | 3 +- .../find_first_of_pointer_size_size.pass.cpp | 3 +- .../find_last_not_of_char_size.pass.cpp | 3 +- .../find_last_not_of_pointer_size.pass.cpp | 3 +- ...ind_last_not_of_pointer_size_size.pass.cpp | 3 +- .../find_last_of_char_size.pass.cpp | 3 +- .../find_last_of_pointer_size.pass.cpp | 3 +- .../find_last_of_pointer_size_size.pass.cpp | 3 +- .../find_pointer_size.pass.cpp | 3 +- .../find_pointer_size_size.pass.cpp | 3 +- .../find_string_view_size.pass.cpp | 3 +- .../string.view.find/rfind_char_size.pass.cpp | 3 +- .../rfind_pointer_size.pass.cpp | 3 +- .../rfind_pointer_size_size.pass.cpp | 3 +- .../rfind_string_view_size.pass.cpp | 3 +- .../string.view.iterators/begin.pass.cpp | 2 +- .../string.view.iterators/end.pass.cpp | 9 +- .../string.view.iterators/rend.pass.cpp | 7 +- .../string.view.modifiers/clear.pass.cpp | 4 +- .../remove_prefix.pass.cpp | 4 +- .../remove_suffix.pass.cpp | 4 +- .../string.view.modifiers/swap.pass.cpp | 4 +- .../string.view.nonmem/quoted.pass.cpp | 4 +- .../string.view.ops/compare.pointer.pass.cpp | 3 +- .../string.view.ops/compare.sv.pass.cpp | 3 +- .../string.view.ops/substr.pass.cpp | 1 + .../meta/meta.detect/detected_or.pass.cpp | 40 + .../meta/meta.detect/detected_t.pass.cpp | 48 + .../meta/meta.detect/is_detected.pass.cpp | 37 + .../is_detected_convertible.pass.cpp | 50 + .../meta.detect/is_detected_exact.pass.cpp | 49 + .../meta/meta.logical/conjunction.pass.cpp | 68 + .../meta/meta.logical/disjunction.pass.cpp | 68 + .../meta/meta.logical/negation.pass.cpp | 41 + .../propagate_const.ctors/move_ctor.pass.cpp | 1 + .../propagate_const.nonmembers/hash.pass.cpp | 2 +- .../header.ratio.synop/includes.pass.cpp | 1 + .../tuple/tuple.apply/return_type.pass.cpp | 32 +- .../utility.erased.type/erased_type.pass.cpp | 3 +- .../file.streams/c.files/cinttypes.pass.cpp | 86 +- .../file.streams/c.files/cstdio.pass.cpp | 4 +- .../filebuf.virtuals/underflow.pass.cpp | 4 +- .../fstreams/ifstream.cons/pointer.pass.cpp | 18 +- .../fstreams/ifstream.cons/string.pass.cpp | 18 +- .../fstreams/ofstream.cons/pointer.pass.cpp | 12 + .../fstreams/ofstream.cons/string.pass.cpp | 12 + .../ext.manip/put_time.pass.cpp | 4 +- .../istream.rvalue/rvalue.pass.cpp | 21 +- .../istream.unformatted/get.pass.cpp | 10 +- .../get_streambuf.pass.cpp | 4 +- .../get_streambuf_chart.pass.cpp | 4 +- .../istream.unformatted/ignore_0xff.pass.cpp | 4 +- .../bool.pass.cpp | 4 +- .../double.pass.cpp | 4 +- .../float.pass.cpp | 4 +- .../ostream.inserters.arithmetic/int.pass.cpp | 4 +- .../long.pass.cpp | 4 +- .../long_double.pass.cpp | 4 +- .../long_long.pass.cpp | 4 +- .../minus1.pass.cpp | 2 +- .../pointer.pass.cpp | 4 +- .../short.pass.cpp | 4 +- .../unsigned_int.pass.cpp | 4 +- .../unsigned_long.pass.cpp | 4 +- .../unsigned_long_long.pass.cpp | 6 +- .../unsigned_short.pass.cpp | 4 +- .../CharT.pass.cpp | 2 +- .../CharT_pointer.pass.cpp | 2 +- .../ostream.inserters.character/char.pass.cpp | 4 +- .../char_pointer.pass.cpp | 4 +- .../char_to_wide.pass.cpp | 2 +- .../char_to_wide_pointer.pass.cpp | 2 +- .../signed_char.pass.cpp | 4 +- .../signed_char_pointer.pass.cpp | 4 +- .../unsigned_char.pass.cpp | 4 +- .../unsigned_char_pointer.pass.cpp | 4 +- .../ostream.inserters/basic_ios.pass.cpp | 4 +- .../ostream.inserters/ios_base.pass.cpp | 4 +- .../ostream.inserters/ostream.pass.cpp | 4 +- .../ostream.inserters/streambuf.pass.cpp | 4 +- .../ostream.manip/endl.pass.cpp | 4 +- .../ostream.manip/ends.pass.cpp | 4 +- .../ostream.rvalue/CharT_pointer.pass.cpp | 4 +- .../ostream.unformatted/put.pass.cpp | 4 +- .../ostream.unformatted/write.pass.cpp | 4 +- .../ostream_sentry/destruct.pass.cpp | 5 +- .../quoted.manip/quoted.pass.cpp | 1 + .../iostream.forward/iosfwd.pass.cpp | 231 +- .../ios/basic.ios.members/copyfmt.pass.cpp | 5 +- .../ios/basic.ios.members/set_rdbuf.pass.cpp | 8 +- .../ios/iostate.flags/bool.pass.cpp | 9 + .../ios/iostate.flags/clear.pass.cpp | 6 +- .../iostate.flags/exceptions_iostate.pass.cpp | 5 +- .../ios/iostate.flags/setstate.pass.cpp | 6 +- .../is_error_code_enum_io_errc.pass.cpp | 25 + .../streambuf/streambuf.cons/copy.fail.cpp | 4 +- .../ostringstream.assign/member_swap.pass.cpp | 8 +- .../ostringstream.assign/move.pass.cpp | 4 +- .../nonmember_swap.pass.cpp | 8 +- .../ostringstream.cons/move.pass.cpp | 4 +- .../ostringstream.cons/string.pass.cpp | 8 +- .../stringbuf.virtuals/overflow.pass.cpp | 2 +- .../stringbuf.virtuals/pbackfail.pass.cpp | 2 +- .../stringstream.cons/move2.pass.cpp | 3 +- .../iterator.range/begin-end.fail.cpp | 4 +- .../iterator.range/begin-end.pass.cpp | 19 +- .../make_move_iterator.pass.cpp | 11 + .../move.iter.nonmember/minus.pass.cpp | 14 + .../move.iter.nonmember/plus.pass.cpp | 16 + .../move.iter.op.+/difference_type.pass.cpp | 16 + .../move.iter.op.+=/difference_type.pass.cpp | 16 + .../move.iter.op.-/difference_type.pass.cpp | 16 + .../move.iter.op.-=/difference_type.pass.cpp | 12 + .../move.iter.op.comp/op_eq.pass.cpp | 16 + .../move.iter.op.comp/op_gt.pass.cpp | 16 + .../move.iter.op.comp/op_gte.pass.cpp | 16 + .../move.iter.op.comp/op_lt.pass.cpp | 16 + .../move.iter.op.comp/op_lte.pass.cpp | 16 + .../move.iter.op.comp/op_neq.pass.cpp | 16 + .../move.iter.op.const/convert.pass.cpp | 12 + .../move.iter.op.const/default.pass.cpp | 9 + .../move.iter.op.const/iter.pass.cpp | 11 + .../move.iter.op.decr/post.pass.cpp | 16 + .../move.iter.op.decr/pre.pass.cpp | 16 + .../move.iter.op.incr/post.pass.cpp | 16 + .../move.iter.op.incr/pre.pass.cpp | 16 + .../difference_type.pass.cpp | 44 +- .../move.iter.op.ref/op_arrow.pass.cpp | 15 + .../move.iter.op.star/op_star.pass.cpp | 37 +- .../move.iter.op=/move_iterator.pass.cpp | 13 + .../reverse.iter.cons/default.pass.cpp | 11 +- .../reverse.iter.cons/iter.pass.cpp | 13 +- .../reverse_iterator.pass.cpp | 14 +- .../make_reverse_iterator.pass.cpp | 14 +- .../reverse.iter.op!=/test.pass.cpp | 17 +- .../reverse.iter.op++/post.pass.cpp | 18 +- .../reverse.iter.op++/pre.pass.cpp | 19 +- .../reverse.iter.op+/difference_type.pass.cpp | 18 +- .../difference_type.pass.cpp | 14 +- .../reverse.iter.op--/post.pass.cpp | 18 +- .../reverse.iter.op--/pre.pass.cpp | 19 +- .../reverse.iter.op-/difference_type.pass.cpp | 18 +- .../difference_type.pass.cpp | 14 +- .../reverse.iter.op.star/op_star.pass.cpp | 17 +- .../reverse_iterator.pass.cpp | 16 +- .../reverse.iter.op==/test.pass.cpp | 18 +- .../reverse.iter.opdiff/test.pass.cpp | 16 +- .../reverse.iter.opgt/test.pass.cpp | 17 +- .../reverse.iter.opgt=/test.pass.cpp | 17 +- .../difference_type.pass.cpp | 11 + .../reverse.iter.oplt/test.pass.cpp | 17 +- .../reverse.iter.oplt=/test.pass.cpp | 17 +- .../reverse.iter.opref/op_arrow.pass.cpp | 32 +- .../difference_type.pass.cpp | 18 +- .../istream.iterator.cons/copy.pass.cpp | 4 + .../istream.iterator.cons/default.pass.cpp | 31 + .../istream.iterator/types.pass.cpp | 15 +- .../istreambuf.iterator_equal/equal.pass.cpp | 22 + .../not_equal.pass.cpp | 22 + .../istreambuf.iterator_op==/equal.pass.cpp | 22 + .../ostream.iterator.cons.des/copy.pass.cpp | 1 + .../ostream.iterator.ops/assign_t.pass.cpp | 4 + .../support.dynamic/align_val_t.pass.cpp | 34 + .../delete_align_val_t_replace.pass.cpp | 89 + .../new.delete.array/new_align_val_t.pass.cpp | 80 + .../new_align_val_t_nothrow.pass.cpp | 82 + .../new_align_val_t_nothrow_replace.pass.cpp | 83 + .../new_align_val_t_replace.pass.cpp | 85 + .../new.delete.array/new_array.pass.cpp | 5 +- .../new_array_nothrow.pass.cpp | 7 +- .../new_array_nothrow_replace.pass.cpp | 14 +- .../new_array_replace.pass.cpp | 13 +- .../sized_delete_array11.pass.cpp | 8 +- .../sized_delete_array14.pass.cpp | 8 +- ..._array_calls_unsized_delete_array.pass.cpp | 6 +- ...zed_delete_array_fsizeddeallocation.sh.cpp | 8 +- .../delete_align_val_t_replace.pass.cpp | 90 + .../new.delete/new.delete.single/new.pass.cpp | 6 +- .../new_align_val_t.pass.cpp | 80 + .../new_align_val_t_nothrow.pass.cpp | 82 + .../new_align_val_t_nothrow_replace.pass.cpp | 84 + .../new_align_val_t_replace.pass.cpp | 85 + .../new.delete.single/new_nothrow.pass.cpp | 7 +- .../new_nothrow_replace.pass.cpp | 13 +- .../new.delete.single/new_replace.pass.cpp | 6 +- .../new.delete.single/sized_delete11.pass.cpp | 8 +- .../new.delete.single/sized_delete14.pass.cpp | 8 +- ...sized_delete_calls_unsized_delete.pass.cpp | 14 +- .../sized_delete_fsizeddeallocation.sh.cpp | 15 +- .../except.nested/assign.pass.cpp | 5 +- .../except.nested/ctor_copy.pass.cpp | 5 +- .../except.nested/ctor_default.pass.cpp | 5 +- .../except.nested/rethrow_if_nested.pass.cpp | 6 +- .../except.nested/rethrow_nested.pass.cpp | 2 +- .../except.nested/throw_with_nested.pass.cpp | 2 +- .../propagation/current_exception.pass.cpp | 2 +- .../propagation/make_exception_ptr.pass.cpp | 2 +- .../propagation/rethrow_exception.pass.cpp | 2 +- .../uncaught/uncaught_exception.pass.cpp | 2 +- .../uncaught/uncaught_exceptions.pass.cpp | 2 +- .../support.initlist.access/access.pass.cpp | 15 +- .../support.initlist.cons/default.pass.cpp | 6 +- .../support.initlist.range/begin_end.pass.cpp | 15 +- .../numeric.limits.members/infinity.pass.cpp | 2 +- .../support.runtime/cstdlib.pass.cpp | 2 - .../support.types/nullptr_t.pass.cpp | 25 +- .../locale.collate/types.pass.cpp | 2 + .../facet.ctype.special/types.pass.cpp | 1 + .../char32_t_in.pass.cpp | 2 +- .../char32_t_out.pass.cpp | 2 +- .../wchar_t_in.pass.cpp | 7 +- .../wchar_t_out.pass.cpp | 13 +- .../locale.codecvt/types_char.pass.cpp | 1 + .../locale.codecvt/types_char16_t.pass.cpp | 3 +- .../locale.codecvt/types_char32_t.pass.cpp | 3 +- .../locale.codecvt/types_wchar_t.pass.cpp | 1 + .../locale.ctype.byname/tolower_1.pass.cpp | 30 +- .../locale.ctype.byname/tolower_many.pass.cpp | 33 +- .../locale.ctype.byname/toupper_1.pass.cpp | 32 +- .../locale.ctype.byname/toupper_many.pass.cpp | 37 +- .../locale.ctype.byname/widen_1.pass.cpp | 21 +- .../locale.ctype.byname/widen_many.pass.cpp | 18 +- .../locale.ctype/types.pass.cpp | 1 + .../curr_symbol.pass.cpp | 13 + .../decimal_point.pass.cpp | 21 +- .../thousands_sep.pass.cpp | 29 +- .../facet.num.put.members/put_long.pass.cpp | 27 - .../put_long_double.pass.cpp | 14 +- .../put_unsigned_long.pass.cpp | 37 +- .../put_unsigned_long_long.pass.cpp | 12 +- .../get_long_long.pass.cpp | 3 +- .../get_unsigned_int.pass.cpp | 2 +- .../get_unsigned_long.pass.cpp | 2 +- .../get_unsigned_long_long.pass.cpp | 2 +- .../get_unsigned_short.pass.cpp | 2 +- .../locale.time.get/time_base.pass.cpp | 1 + .../locale.numpunct.byname/grouping.pass.cpp | 13 +- .../thousands_sep.pass.cpp | 14 +- .../locale.numpunct/types.pass.cpp | 2 + .../conversions.buffer/ctor.pass.cpp | 3 +- .../conversions.buffer/state.pass.cpp | 1 + .../conversions.string/ctor_codecvt.pass.cpp | 4 +- .../ctor_err_string.pass.cpp | 9 +- .../conversions.string/state.pass.cpp | 1 + .../use_facet.pass.cpp | 6 +- .../locale/locale.cons/char_pointer.pass.cpp | 5 +- .../locale/locale.members/combine.pass.cpp | 5 +- test/std/numerics/c.math/ctgmath.pass.cpp | 5 +- test/std/numerics/c.math/tgmath_h.pass.cpp | 4 - .../complex.number/ccmplx/ccomplex.pass.cpp | 4 - .../cmplx.over/UDT_is_rejected.fail.cpp | 74 + .../complex.number/cmplx.over/arg.pass.cpp | 2 +- .../complex.number/cmplx.over/imag.pass.cpp | 5 +- .../complex.number/cmplx.over/norm.pass.cpp | 2 +- .../complex.number/cmplx.over/real.pass.cpp | 5 +- .../complex.members/real_imag.pass.cpp | 4 +- .../complex_equals_complex.pass.cpp | 4 +- .../complex_equals_scalar.pass.cpp | 4 +- .../complex_not_equals_complex.pass.cpp | 4 +- .../complex_not_equals_scalar.pass.cpp | 4 +- .../scalar_equals_complex.pass.cpp | 4 +- .../scalar_not_equals_complex.pass.cpp | 4 +- .../complex.transcendentals/cos.pass.cpp | 1 - .../complex.transcendentals/cosh.pass.cpp | 1 - .../complex.transcendentals/log10.pass.cpp | 1 - .../pow_complex_complex.pass.cpp | 1 - .../pow_complex_scalar.pass.cpp | 1 - .../pow_scalar_complex.pass.cpp | 1 - .../complex.transcendentals/sin.pass.cpp | 1 - .../complex.transcendentals/sinh.pass.cpp | 1 - .../complex.transcendentals/tan.pass.cpp | 1 - .../complex.transcendentals/tanh.pass.cpp | 1 - .../slice.arr.assign/slice_array.pass.cpp | 1 - .../valarray.access/access.pass.cpp | 4 +- .../valarray.access/const_access.pass.cpp | 2 +- .../valarray.assign/copy_assign.pass.cpp | 9 +- .../initializer_list_assign.pass.cpp | 9 +- .../valarray.assign/move_assign.pass.cpp | 9 +- .../valarray.assign/value_assign.pass.cpp | 3 +- .../valarray.cassign/and_valarray.pass.cpp | 3 +- .../valarray.cassign/and_value.pass.cpp | 3 +- .../valarray.cassign/divide_valarray.pass.cpp | 3 +- .../valarray.cassign/divide_value.pass.cpp | 3 +- .../valarray.cassign/minus_valarray.pass.cpp | 3 +- .../valarray.cassign/minus_value.pass.cpp | 3 +- .../valarray.cassign/modulo_valarray.pass.cpp | 3 +- .../valarray.cassign/modulo_value.pass.cpp | 3 +- .../valarray.cassign/or_valarray.pass.cpp | 3 +- .../valarray.cassign/or_value.pass.cpp | 3 +- .../valarray.cassign/plus_valarray.pass.cpp | 3 +- .../valarray.cassign/plus_value.pass.cpp | 3 +- .../shift_left_valarray.pass.cpp | 3 +- .../shift_left_value.pass.cpp | 3 +- .../shift_right_valarray.pass.cpp | 3 +- .../shift_right_value.pass.cpp | 3 +- .../valarray.cassign/times_valarray.pass.cpp | 3 +- .../valarray.cassign/times_value.pass.cpp | 3 +- .../valarray.cassign/xor_valarray.pass.cpp | 3 +- .../valarray.cassign/xor_value.pass.cpp | 3 +- .../valarray.cons/copy.pass.cpp | 9 +- .../valarray.cons/initializer_list.pass.cpp | 4 +- .../valarray.cons/move.pass.cpp | 9 +- .../valarray.cons/pointer_size.pass.cpp | 9 +- .../valarray.members/resize.pass.cpp | 7 +- .../valarray.members/swap.pass.cpp | 21 +- .../valarray.unary/bit_not.pass.cpp | 9 +- .../valarray.unary/negate.pass.cpp | 11 +- .../valarray.unary/not.pass.cpp | 5 +- .../valarray.unary/plus.pass.cpp | 11 +- .../and_valarray_valarray.pass.cpp | 3 +- .../and_valarray_value.pass.cpp | 3 +- .../and_value_valarray.pass.cpp | 3 +- .../divide_valarray_valarray.pass.cpp | 3 +- .../divide_valarray_value.pass.cpp | 3 +- .../divide_value_valarray.pass.cpp | 3 +- .../minus_valarray_valarray.pass.cpp | 3 +- .../minus_valarray_value.pass.cpp | 3 +- .../minus_value_valarray.pass.cpp | 3 +- .../modulo_valarray_valarray.pass.cpp | 3 +- .../modulo_valarray_value.pass.cpp | 3 +- .../modulo_value_valarray.pass.cpp | 3 +- .../or_valarray_valarray.pass.cpp | 3 +- .../or_valarray_value.pass.cpp | 3 +- .../or_value_valarray.pass.cpp | 3 +- .../plus_valarray_valarray.pass.cpp | 3 +- .../plus_valarray_value.pass.cpp | 3 +- .../plus_value_valarray.pass.cpp | 3 +- .../shift_left_valarray_valarray.pass.cpp | 3 +- .../shift_left_valarray_value.pass.cpp | 3 +- .../shift_left_value_valarray.pass.cpp | 3 +- .../shift_right_valarray_valarray.pass.cpp | 3 +- .../shift_right_valarray_value.pass.cpp | 3 +- .../shift_right_value_valarray.pass.cpp | 3 +- .../times_valarray_valarray.pass.cpp | 3 +- .../times_valarray_value.pass.cpp | 3 +- .../times_value_valarray.pass.cpp | 3 +- .../xor_valarray_valarray.pass.cpp | 3 +- .../xor_valarray_value.pass.cpp | 3 +- .../xor_value_valarray.pass.cpp | 3 +- .../and_valarray_valarray.pass.cpp | 3 +- .../and_valarray_value.pass.cpp | 5 +- .../and_value_valarray.pass.cpp | 5 +- .../equal_valarray_valarray.pass.cpp | 3 +- .../equal_valarray_value.pass.cpp | 3 +- .../equal_value_valarray.pass.cpp | 3 +- .../greater_equal_valarray_valarray.pass.cpp | 3 +- .../greater_equal_valarray_value.pass.cpp | 3 +- .../greater_equal_value_valarray.pass.cpp | 3 +- .../greater_valarray_valarray.pass.cpp | 3 +- .../greater_valarray_value.pass.cpp | 3 +- .../greater_value_valarray.pass.cpp | 3 +- .../less_equal_valarray_valarray.pass.cpp | 3 +- .../less_equal_valarray_value.pass.cpp | 3 +- .../less_equal_value_valarray.pass.cpp | 3 +- .../less_valarray_valarray.pass.cpp | 3 +- .../less_valarray_value.pass.cpp | 3 +- .../less_value_valarray.pass.cpp | 3 +- .../not_equal_valarray_valarray.pass.cpp | 3 +- .../not_equal_valarray_value.pass.cpp | 3 +- .../not_equal_value_valarray.pass.cpp | 3 +- .../or_valarray_valarray.pass.cpp | 3 +- .../or_valarray_value.pass.cpp | 5 +- .../or_value_valarray.pass.cpp | 5 +- .../valarray.special/swap.pass.cpp | 21 +- .../valarray.transcend/abs_valarray.pass.cpp | 3 +- .../valarray.transcend/acos_valarray.pass.cpp | 3 +- .../valarray.transcend/asin_valarray.pass.cpp | 3 +- .../atan2_valarray_valarray.pass.cpp | 3 +- .../atan2_valarray_value.pass.cpp | 3 +- .../atan2_value_valarray.pass.cpp | 3 +- .../valarray.transcend/atan_valarray.pass.cpp | 3 +- .../valarray.transcend/cos_valarray.pass.cpp | 3 +- .../valarray.transcend/cosh_valarray.pass.cpp | 3 +- .../valarray.transcend/exp_valarray.pass.cpp | 3 +- .../log10_valarray.pass.cpp | 3 +- .../valarray.transcend/log_valarray.pass.cpp | 3 +- .../pow_valarray_valarray.pass.cpp | 3 +- .../pow_valarray_value.pass.cpp | 3 +- .../pow_value_valarray.pass.cpp | 3 +- .../valarray.transcend/sin_valarray.pass.cpp | 3 +- .../valarray.transcend/sinh_valarray.pass.cpp | 3 +- .../valarray.transcend/sqrt_valarray.pass.cpp | 3 +- .../valarray.transcend/tan_valarray.pass.cpp | 3 +- .../valarray.transcend/tanh_valarray.pass.cpp | 3 +- .../valarray.range/end_const.pass.cpp | 3 +- .../valarray.range/end_non_const.pass.cpp | 3 +- .../numeric.ops.gcd/gcd.bool1.fail.cpp | 25 + .../numeric.ops.gcd/gcd.bool2.fail.cpp | 25 + .../numeric.ops.gcd/gcd.bool3.fail.cpp | 25 + .../numeric.ops.gcd/gcd.bool4.fail.cpp | 25 + .../gcd.not_integral1.fail.cpp | 25 + .../gcd.not_integral2.fail.cpp | 25 + .../numeric.ops/numeric.ops.gcd/gcd.pass.cpp | 132 + .../numeric.ops.lcm/lcm.bool1.fail.cpp | 25 + .../numeric.ops.lcm/lcm.bool2.fail.cpp | 25 + .../numeric.ops.lcm/lcm.bool3.fail.cpp | 25 + .../numeric.ops.lcm/lcm.bool4.fail.cpp | 25 + .../lcm.not_integral1.fail.cpp | 25 + .../lcm.not_integral2.fail.cpp | 25 + .../numeric.ops/numeric.ops.lcm/lcm.pass.cpp | 131 + .../rand.adapt.disc/values.pass.cpp | 18 +- .../rand.adapt/rand.adapt.ibits/eval.pass.cpp | 8 +- .../rand.adapt.ibits/result_type.pass.cpp | 8 +- .../rand.adapt.ibits/values.pass.cpp | 18 +- .../rand.adapt/rand.adapt.shuf/eval.pass.cpp | 8 +- .../rand.adapt.shuf/result_type.pass.cpp | 8 +- .../rand.adapt.shuf/values.pass.cpp | 9 +- .../numerics/rand/rand.device/ctor.pass.cpp | 5 +- .../rand/rand.device/entropy.pass.cpp | 1 + .../numerics/rand/rand.device/eval.pass.cpp | 4 +- .../rand.dist.bern.bernoulli/eval.pass.cpp | 5 +- .../eval_param.pass.cpp | 5 +- .../rand.dist.bern.bin/eval.pass.cpp | 38 +- .../rand.dist.bern.bin/eval_param.pass.cpp | 6 +- .../rand.dist.bern.geo/eval.pass.cpp | 12 +- .../rand.dist.bern.geo/eval_param.pass.cpp | 6 +- .../rand.dist.bern.negbin/eval.pass.cpp | 16 +- .../rand.dist.bern.negbin/eval_param.pass.cpp | 6 +- .../rand.dist.norm.chisq/eval.pass.cpp | 7 +- .../rand.dist.norm.chisq/eval_param.pass.cpp | 7 +- .../rand.dist.norm.f/eval.pass.cpp | 2 +- .../rand.dist.norm.f/eval_param.pass.cpp | 2 +- .../rand.dist.norm.lognormal/eval.pass.cpp | 10 +- .../eval_param.pass.cpp | 10 +- .../rand.dist.norm.normal/eval.pass.cpp | 3 +- .../rand.dist.norm.normal/eval_param.pass.cpp | 3 +- .../rand.dist.norm.t/eval.pass.cpp | 6 +- .../rand.dist.norm.t/eval_param.pass.cpp | 6 +- .../rand.dist.pois.exp/eval.pass.cpp | 7 +- .../rand.dist.pois.exp/eval_param.pass.cpp | 3 +- .../rand.dist.pois.extreme/eval.pass.cpp | 8 +- .../eval_param.pass.cpp | 8 +- .../rand.dist.pois.gamma/eval.pass.cpp | 6 +- .../rand.dist.pois.gamma/eval_param.pass.cpp | 6 +- .../rand.dist.pois.poisson/eval.pass.cpp | 6 +- .../eval_param.pass.cpp | 6 +- .../rand.dist.pois.weibull/eval.pass.cpp | 7 +- .../eval_param.pass.cpp | 7 +- .../rand.dist.samp.pconst/eval.pass.cpp | 44 +- .../rand.dist.samp.pconst/eval_param.pass.cpp | 5 +- .../rand.dist.samp.plinear/eval.pass.cpp | 66 +- .../eval_param.pass.cpp | 12 +- .../rand.dist.uni.int/eval.pass.cpp | 21 +- .../rand.dist.uni.int/eval_param.pass.cpp | 3 +- .../rand.dist.uni.real/eval.pass.cpp | 23 +- .../rand.dist.uni.real/eval_param.pass.cpp | 3 +- .../rand.eng/rand.eng.lcong/assign.pass.cpp | 2 +- .../rand.eng/rand.eng.lcong/copy.pass.cpp | 2 +- .../rand.eng/rand.eng.lcong/default.pass.cpp | 2 +- .../rand.eng.lcong/seed_result_type.pass.cpp | 2 +- .../rand.eng/rand.eng.lcong/values.pass.cpp | 25 +- .../rand.eng/rand.eng.mers/values.pass.cpp | 18 +- .../rand.eng/rand.eng.sub/values.pass.cpp | 18 +- .../default_random_engine.pass.cpp | 4 +- test/std/re/re.alg/re.alg.match/awk.pass.cpp | 7 +- .../std/re/re.alg/re.alg.match/basic.pass.cpp | 52 +- test/std/re/re.alg/re.alg.match/ecma.pass.cpp | 126 +- .../re/re.alg/re.alg.match/extended.pass.cpp | 68 +- test/std/re/re.alg/re.alg.search/awk.pass.cpp | 72 +- .../re/re.alg/re.alg.search/basic.pass.cpp | 52 +- .../std/re/re.alg/re.alg.search/ecma.pass.cpp | 64 +- .../re/re.alg/re.alg.search/extended.pass.cpp | 68 +- .../std/re/re.alg/re.alg.search/grep.pass.cpp | 5 +- .../re.matchflag/match_not_null.pass.cpp | 46 + .../re.regex/re.regex.assign/assign.pass.cpp | 3 +- .../re.regex.construct/bad_backref.pass.cpp | 44 + .../re.regex.construct/bad_escape.pass.cpp | 2 +- .../re.regex.construct/bad_repeat.pass.cpp | 2 +- .../re.regex.construct/ptr_size.pass.cpp | 39 + test/std/re/re.regex/types.pass.cpp | 6 + .../re.results.acc/begin_end.pass.cpp | 3 +- .../re.results.acc/cbegin_cend.pass.cpp | 3 +- .../compare_string_type.pass.cpp | 2 - .../compare_value_type_ptr.pass.cpp | 2 - test/std/re/re.traits/value.pass.cpp | 16 +- .../basic.string/string.access/at.pass.cpp | 31 +- .../basic.string/string.access/index.pass.cpp | 4 +- .../string.capacity/capacity.pass.cpp | 7 +- .../string.capacity/max_size.pass.cpp | 2 +- .../string.capacity/over_max_size.pass.cpp | 2 +- .../string.capacity/reserve.pass.cpp | 19 +- .../string.capacity/resize_size.pass.cpp | 18 +- .../string.capacity/resize_size_char.pass.cpp | 18 +- .../string.cons/T_size_size.pass.cpp | 186 + .../string.cons/dtor_noexcept.pass.cpp | 8 +- .../string.cons/iter_alloc.pass.cpp | 5 +- .../string.cons/pointer_alloc.pass.cpp | 5 +- .../string.cons/size_char_alloc.pass.cpp | 17 +- .../string.cons/string_view.fail.cpp | 23 + .../string.cons/string_view.pass.cpp | 89 + .../basic.string/string.cons/substr.pass.cpp | 64 +- .../string.iterators/end.pass.cpp | 5 +- .../string.iterators/rend.pass.cpp | 5 +- .../string_append/T_size_size.pass.cpp | 200 + .../string_append/iterator.pass.cpp | 26 + .../string_append/pointer.pass.cpp | 16 + .../string_append/pointer_size.pass.cpp | 16 + .../string_append/string_size_size.pass.cpp | 35 +- .../string_append/string_view.pass.cpp | 83 + .../string_assign/T_size_size.pass.cpp | 195 + .../string_assign/iterator.pass.cpp | 26 + .../string_assign/pointer.pass.cpp | 14 + .../string_assign/pointer_size.pass.cpp | 16 + .../string_assign/string_size_size.pass.cpp | 35 +- .../string_assign/string_view.pass.cpp | 105 + .../string_copy/copy.pass.cpp | 21 +- .../string_erase/size_size.pass.cpp | 43 +- .../string_insert/iter_iter_iter.pass.cpp | 25 + .../string_insert/size_T_size_size.pass.cpp | 1842 +++++ .../string_insert/size_pointer.pass.cpp | 38 +- .../string_insert/size_pointer_size.pass.cpp | 38 +- .../string_insert/size_size_char.pass.cpp | 22 +- .../string_insert/size_string.pass.cpp | 22 +- .../size_string_size_size.pass.cpp | 43 +- .../iter_iter_iter_iter.pass.cpp | 30 + .../string_replace/iter_iter_pointer.pass.cpp | 16 + .../iter_iter_pointer_size.pass.cpp | 16 + .../size_size_T_size_size.pass.cpp | 6022 +++++++++++++++++ .../string_replace/size_size_pointer.pass.cpp | 22 +- .../size_size_pointer_size.pass.cpp | 22 +- .../size_size_size_char.pass.cpp | 22 +- .../string_replace/size_size_string.pass.cpp | 22 +- .../size_size_string_size_size.pass.cpp | 43 +- .../string.special/swap_noexcept.pass.cpp | 15 +- .../string_op!=/string_string_view.pass.cpp | 70 + .../string_op!=/string_view_string.pass.cpp | 70 + .../string_string_view.pass.cpp | 70 + .../string_view_string.pass.cpp | 70 + .../string_opgt/string_string_view.pass.cpp | 70 + .../string_opgt/string_view_string.pass.cpp | 70 + .../string_opgt=/string_string_view.pass.cpp | 70 + .../string_opgt=/string_view_string.pass.cpp | 70 + .../string_oplt/string_string_view.pass.cpp | 70 + .../string_oplt/string_view_string.pass.cpp | 70 + .../string_oplt=/string_string_view.pass.cpp | 70 + .../string_oplt=/string_view_string.pass.cpp | 70 + .../size_size_T_size_size.pass.cpp | 5993 ++++++++++++++++ .../string_compare/size_size_pointer.pass.cpp | 22 +- .../size_size_pointer_size.pass.cpp | 22 +- .../string_compare/size_size_string.pass.cpp | 22 +- .../size_size_string_size_size.pass.cpp | 49 +- .../string.ops/string_substr/substr.pass.cpp | 17 +- .../string.require/contiguous.pass.cpp | 2 +- .../assign3.pass.cpp | 1 - .../eq.pass.cpp | 1 - .../assign3.pass.cpp | 1 - .../eof.pass.cpp | 1 + .../eq.pass.cpp | 1 - .../lt.pass.cpp | 1 - .../assign3.pass.cpp | 1 - .../eof.pass.cpp | 1 + .../eq.pass.cpp | 1 - .../lt.pass.cpp | 1 - .../assign3.pass.cpp | 1 - .../eq.pass.cpp | 1 - .../lt.pass.cpp | 1 - .../strings/string.conversions/stod.pass.cpp | 23 +- .../strings/string.conversions/stof.pass.cpp | 19 +- .../strings/string.conversions/stoi.pass.cpp | 5 +- .../strings/string.conversions/stol.pass.cpp | 5 +- .../strings/string.conversions/stold.pass.cpp | 25 +- .../strings/string.conversions/stoll.pass.cpp | 5 +- .../strings/string.conversions/stoul.pass.cpp | 5 +- .../string.conversions/stoull.pass.cpp | 5 +- .../string.view/nothing_to_do.pass.cpp | 12 + .../string.view.access/at.pass.cpp | 63 + .../string.view.access/back.pass.cpp | 50 + .../string.view.access/data.pass.cpp | 50 + .../string.view.access/front.pass.cpp | 50 + .../string.view.access/index.pass.cpp | 53 + .../string.view.capacity/capacity.pass.cpp | 89 + .../opeq.string_view.pointer.pass.cpp | 69 + .../opeq.string_view.string.pass.cpp | 51 + .../opeq.string_view.string_view.pass.cpp | 62 + .../opge.string_view.pointer.pass.cpp | 72 + .../opge.string_view.string.pass.cpp | 50 + .../opge.string_view.string_view.pass.cpp | 65 + .../opgt.string_view.pointer.pass.cpp | 72 + .../opgt.string_view.string.pass.cpp | 50 + .../opgt.string_view.string_view.pass.cpp | 65 + .../ople.string_view.pointer.pass.cpp | 72 + .../ople.string_view.string.pass.cpp | 50 + .../ople.string_view.string_view.pass.cpp | 65 + .../oplt.string_view.pointer.pass.cpp | 72 + .../oplt.string_view.string.pass.cpp | 50 + .../oplt.string_view.string_view.pass.cpp | 65 + .../opne.string_view.pointer.pass.cpp | 70 + .../opne.string_view.string.pass.cpp | 50 + .../opne.string_view.string_view.pass.cpp | 62 + .../string.view.cons/default.pass.cpp | 48 + .../string.view.cons/from_literal.pass.cpp | 65 + .../string.view.cons/from_ptr_len.pass.cpp | 83 + .../string.view.cons/from_string.pass.cpp | 56 + .../string.view.cons/from_string1.fail.cpp | 32 + .../string.view.cons/from_string2.fail.cpp | 32 + .../string.view.find/find_char_size.pass.cpp | 85 + .../find_first_not_of_char_size.pass.cpp | 85 + .../find_first_not_of_pointer_size.pass.cpp | 166 + ...nd_first_not_of_pointer_size_size.pass.cpp | 393 ++ ...ind_first_not_of_string_view_size.pass.cpp | 148 + .../find_first_of_char_size.pass.cpp | 83 + .../find_first_of_pointer_size.pass.cpp | 166 + .../find_first_of_pointer_size_size.pass.cpp | 393 ++ .../find_first_of_string_view_size.pass.cpp | 148 + .../find_last_not_of_char_size.pass.cpp | 83 + .../find_last_not_of_pointer_size.pass.cpp | 166 + ...ind_last_not_of_pointer_size_size.pass.cpp | 393 ++ ...find_last_not_of_string_view_size.pass.cpp | 148 + .../find_last_of_char_size.pass.cpp | 83 + .../find_last_of_pointer_size.pass.cpp | 166 + .../find_last_of_pointer_size_size.pass.cpp | 393 ++ .../find_last_of_string_view_size.pass.cpp | 148 + .../find_pointer_size.pass.cpp | 172 + .../find_pointer_size_size.pass.cpp | 394 ++ .../find_string_view_size.pass.cpp | 165 + .../string.view.find/rfind_char_size.pass.cpp | 84 + .../rfind_pointer_size.pass.cpp | 172 + .../rfind_pointer_size_size.pass.cpp | 393 ++ .../rfind_string_view_size.pass.cpp | 165 + .../string.view.hash/string_view.pass.cpp | 55 + .../string.view.io/stream_insert.pass.cpp | 58 + .../string.view.iterators/begin.pass.cpp | 79 + .../string.view.iterators/end.pass.cpp | 88 + .../string.view.iterators/rbegin.pass.cpp | 61 + .../string.view.iterators/rend.pass.cpp | 69 + .../string.view.modifiers/clear.pass.cpp | 67 + .../remove_prefix.pass.cpp | 78 + .../remove_suffix.pass.cpp | 78 + .../string.view.modifiers/swap.pass.cpp | 76 + .../string.view.nonmem/quoted.pass.cpp | 214 + .../string.view.ops/compare.pointer.pass.cpp | 127 + .../compare.pointer_size.pass.cpp | 452 ++ .../compare.size_size_sv.pass.cpp | 401 ++ ...compare.size_size_sv_pointer_size.pass.cpp | 1352 ++++ .../compare.size_size_sv_size_size.pass.cpp | 5847 ++++++++++++++++ .../string.view.ops/compare.sv.pass.cpp | 122 + .../string.view/string.view.ops/copy.pass.cpp | 102 + .../string.view.ops/substr.pass.cpp | 121 + .../string.view.synop/nothing_to_do.pass.cpp | 12 + .../nothing_to_do.pass.cpp | 12 + .../futures/futures.async/async.pass.cpp | 6 +- .../futures.future_error/code.pass.cpp | 14 + .../futures.future_error/what.pass.cpp | 10 +- .../is_error_code_enum_future_errc.pass.cpp | 6 +- .../futures/futures.promise/dtor.pass.cpp | 11 +- .../futures.promise/get_future.pass.cpp | 5 +- .../futures.promise/move_assign.pass.cpp | 8 +- .../futures.promise/move_ctor.pass.cpp | 8 +- .../futures.promise/set_exception.pass.cpp | 2 +- .../set_exception_at_thread_exit.pass.cpp | 3 +- .../futures.promise/set_lvalue.pass.cpp | 5 +- .../futures.promise/set_value_const.pass.cpp | 11 +- .../futures.promise/set_value_void.pass.cpp | 2 +- .../copy_assign.pass.cpp | 6 + .../futures.shared_future/copy_ctor.pass.cpp | 6 + .../futures.shared_future/get.pass.cpp | 9 +- .../futures.task.members/ctor1.fail.cpp | 7 +- .../futures.task.members/dtor.pass.cpp | 8 +- .../futures.task.members/get_future.pass.cpp | 5 +- .../make_ready_at_thread_exit.pass.cpp | 15 +- .../futures.task.members/operator.pass.cpp | 15 +- .../futures.task.members/reset.pass.cpp | 7 +- .../futures.unique_future/get.pass.cpp | 9 +- ...otify_from_pthread_created_thread.pass.cpp | 75 + .../wait_for_pred.pass.cpp | 1 + .../wait_for_pred.pass.cpp | 6 +- .../wait_terminates.sh.cpp | 2 +- .../thread.lock.algorithm/lock.pass.cpp | 20 +- .../thread.lock.algorithm/try_lock.pass.cpp | 13 +- .../variadic_adopt_lock.pass.cpp | 1 + .../variadic_assign.fail.cpp | 1 + .../thread.lock.guard/variadic_copy.fail.cpp | 1 + .../thread.lock.guard/variadic_mutex.fail.cpp | 1 + .../thread.lock.guard/variadic_mutex.pass.cpp | 1 + .../variadic_mutex_cxx03.pass.cpp | 2 +- .../thread.lock.guard/variadic_types.pass.cpp | 1 + .../thread.lock.shared.cons/mutex.pass.cpp | 2 + .../mutex_duration.pass.cpp | 2 + .../mutex_time_point.pass.cpp | 2 + .../thread.lock.shared.locking/lock.pass.cpp | 5 +- .../try_lock.pass.cpp | 8 +- .../try_lock_for.pass.cpp | 7 +- .../try_lock_until.pass.cpp | 7 +- .../unlock.pass.cpp | 7 +- .../mutex_duration.pass.cpp | 2 + .../mutex_time_point.pass.cpp | 2 + .../thread.lock.unique.locking/lock.pass.cpp | 7 +- .../try_lock.pass.cpp | 7 +- .../try_lock_for.pass.cpp | 7 +- .../try_lock_until.pass.cpp | 7 +- .../unlock.pass.cpp | 7 +- .../thread.mutex/thread.lock/types.pass.cpp | 6 +- .../thread.shared_mutex.class/lock.pass.cpp | 2 + .../lock_shared.pass.cpp | 2 + .../try_lock_shared.pass.cpp | 2 + .../lock.pass.cpp | 2 + .../lock_shared.pass.cpp | 2 + .../try_lock_for.pass.cpp | 2 + .../try_lock_shared.pass.cpp | 2 + .../try_lock_shared_for.pass.cpp | 2 + .../try_lock_shared_until.pass.cpp | 2 + .../try_lock_until.pass.cpp | 2 + .../thread.once.callonce/call_once.pass.cpp | 7 +- .../thread.once.callonce/race.pass.cpp | 48 + .../thread.thread.assign/move2.pass.cpp | 1 - .../thread.thread.constr/F.pass.cpp | 11 +- .../thread.thread.member/get_id.pass.cpp | 3 +- .../allocator.adaptor.cnstr/allocs.pass.cpp | 5 +- .../converting_copy.pass.cpp | 5 +- .../converting_move.pass.cpp | 6 +- .../allocator.adaptor.cnstr/copy.pass.cpp | 6 +- .../allocator.adaptor.cnstr/default.pass.cpp | 5 +- .../allocate_size.pass.cpp | 5 +- .../allocate_size_hint.pass.cpp | 5 +- .../construct.pass.cpp | 9 +- .../construct_pair.pass.cpp | 139 + .../construct_pair_const_lvalue_pair.pass.cpp | 155 + .../construct_pair_piecewise.pass.cpp | 156 + .../construct_pair_rvalue.pass.cpp | 155 + .../construct_pair_values.pass.cpp | 147 + .../construct_type.pass.cpp | 139 + .../deallocate.pass.cpp | 4 +- .../destroy.pass.cpp | 5 +- .../inner_allocator.pass.cpp | 5 +- .../max_size.pass.cpp | 5 +- .../outer_allocator.pass.cpp | 5 +- ...ct_on_container_copy_construction.pass.cpp | 5 +- .../inner_allocator_type.pass.cpp | 6 +- .../is_always_equal.pass.cpp | 7 +- ...gate_on_container_copy_assignment.pass.cpp | 5 +- ...gate_on_container_move_assignment.pass.cpp | 5 +- .../propagate_on_container_swap.pass.cpp | 6 +- .../copy_assign.pass.cpp | 4 +- .../scoped.adaptor.operators/eq.pass.cpp | 6 +- .../move_assign.pass.cpp | 4 +- .../allocator.adaptor/types.pass.cpp | 6 +- .../any/any.class/any.assign/copy.pass.cpp | 197 + .../any/any.class/any.assign/move.pass.cpp | 108 + .../any/any.class/any.assign/value.pass.cpp | 209 + .../any/any.class/any.cons/copy.pass.cpp | 100 + .../any/any.class/any.cons/default.pass.cpp | 47 + .../any.class/any.cons/in_place_type.pass.cpp | 194 + .../any/any.class/any.cons/move.pass.cpp | 104 + .../any/any.class/any.cons/value.pass.cpp | 154 + .../any.class/any.modifiers/emplace.pass.cpp | 262 + .../any.class/any.modifiers/reset.pass.cpp | 63 + .../any/any.class/any.modifiers/swap.pass.cpp | 133 + .../any.observers/has_value.pass.cpp | 64 + .../any/any.class/any.observers/type.pass.cpp | 41 + .../any/any.class/not_literal_type.pass.cpp | 21 + .../any.cast/any_cast_pointer.pass.cpp | 171 + .../any.cast/any_cast_reference.pass.cpp | 313 + ...st_request_invalid_value_category.fail.cpp | 66 + .../any.cast/const_correctness.fail.cpp | 46 + .../any.cast/not_copy_constructible.fail.cpp | 58 + .../any.cast/reference_types.fail.cpp | 37 + .../any/any.nonmembers/make_any.pass.cpp | 140 + .../any/any.nonmembers/swap.pass.cpp | 40 + .../arithmetic.operations/divides.pass.cpp | 8 +- .../arithmetic.operations/minus.pass.cpp | 8 +- .../arithmetic.operations/modulus.pass.cpp | 4 +- .../arithmetic.operations/multiplies.pass.cpp | 8 +- .../arithmetic.operations/negate.pass.cpp | 8 +- .../arithmetic.operations/plus.pass.cpp | 8 +- .../func.bind.bind/bind_return_type.pass.cpp | 8 +- .../invoke_function_object.pass.cpp | 2 +- .../func.bind/func.bind.bind/nested.pass.cpp | 2 +- .../is_bind_expression.pass.cpp | 4 + .../func.bind.isbind/is_placeholder.pass.cpp | 4 + .../func.bind.place/placeholders.pass.cpp | 26 + .../bitwise.operations/bit_and.pass.cpp | 4 +- .../bitwise.operations/bit_or.pass.cpp | 4 +- .../bitwise.operations/bit_xor.pass.cpp | 4 +- .../pointer_comparison_test_helper.hpp | 6 +- .../invoke_feature_test_macro.pass.cpp | 39 + .../func.not_fn/not_fn.pass.cpp | 28 +- .../func.wrap.func/derive_from.fail.cpp | 25 + .../func.wrap.func/derive_from.pass.cpp | 29 + .../func.wrap.func.alg/swap.pass.cpp | 15 +- .../func.wrap.func.con/F.pass.cpp | 21 + .../func.wrap.func.con/F_assign.pass.cpp | 21 + .../func.wrap.func.con/alloc.fail.cpp | 25 + .../func.wrap.func.con/alloc.pass.cpp | 3 + .../func.wrap.func.con/alloc_F.fail.cpp} | 26 +- .../func.wrap.func.con/alloc_F.pass.cpp | 24 + .../alloc_function.fail.cpp} | 28 +- .../alloc_function.pass.cpp | 1 + .../alloc_nullptr.fail.cpp} | 23 +- .../func.wrap.func.con/alloc_nullptr.pass.cpp | 3 + .../alloc_rfunction.fail.cpp | 60 + .../alloc_rfunction.pass.cpp | 3 + .../func.wrap.func.con/copy_assign.pass.cpp | 119 +- .../func.wrap.func.con/copy_move.pass.cpp | 4 +- .../func.wrap.func.mod/swap.pass.cpp | 175 +- .../logical.operations/logical_and.pass.cpp | 4 +- .../logical.operations/logical_not.pass.cpp | 4 +- .../logical.operations/logical_or.pass.cpp | 4 +- .../refwrap/type_properties.pass.cpp | 6 +- .../function.objects/unord.hash/enum.pass.cpp | 7 +- .../unord.hash/integral.pass.cpp | 4 +- .../unord.hash/non_enum.pass.cpp | 38 + .../intseq/intseq.intseq/integer_seq.fail.cpp | 6 +- .../intseq.make/make_integer_seq.fail.cpp | 3 + .../make_integer_seq_fallback.fail.cpp | 3 + .../allocate.pass.cpp | 5 +- .../allocate_hint.pass.cpp | 17 +- .../construct.pass.cpp | 10 +- .../deallocate.pass.cpp | 5 +- .../allocator.traits.members/destroy.pass.cpp | 6 +- .../max_size.pass.cpp | 22 +- ...ct_on_container_copy_construction.pass.cpp | 6 +- .../allocator.traits/rebind_traits.pass.cpp | 8 +- .../uses_allocator.pass.cpp | 42 +- .../allocator.members/allocate.size.pass.cpp | 34 +- .../allocator_types.pass.cpp | 4 +- .../memory/pointer.traits/rebind.pass.cpp | 4 +- .../addressof.temp.fail.cpp | 26 + .../constexpr_addressof.pass.cpp | 2 +- .../specialized.destroy/destroy.pass.cpp | 47 + .../specialized.destroy/destroy_at.pass.cpp | 78 + .../specialized.destroy/destroy_n.pass.cpp | 49 + .../uninitialized_default_construct.pass.cpp | 112 + ...uninitialized_default_construct_n.pass.cpp | 116 + .../uninitialized_value_construct.pass.cpp | 111 + .../uninitialized_value_construct_n.pass.cpp | 115 + .../uninitialized_copy.pass.cpp | 13 +- .../uninitialized_copy_n.pass.cpp | 13 +- .../uninitialized_fill_n.pass.cpp | 13 +- .../uninitialized_fill.pass.cpp | 13 +- .../uninitialized_move.pass.cpp | 114 + .../uninitialized_move_n.pass.cpp | 117 + .../raw_storage_iterator.pass.cpp | 3 +- .../convert_ctor.pass.cpp | 1 + .../unique.ptr.runtime/null_ctor.pass.cpp | 11 + .../unique.ptr.runtime.ctor/move02.pass.cpp | 6 +- .../pointer_deleter01.pass.cpp | 2 + .../move_convert08.fail.cpp | 42 +- .../move_convert11.fail.cpp | 42 +- .../shared_ptr_Y_rv.pass.cpp | 4 +- .../shared_ptr_rv.pass.cpp | 4 +- ...nullptr_t_deleter_allocator_throw.pass.cpp | 2 +- .../nullptr_t_deleter_throw.pass.cpp | 2 +- .../pointer_deleter_allocator_throw.pass.cpp | 2 +- .../pointer_deleter_throw.pass.cpp | 2 +- .../pointer_throw.pass.cpp | 2 +- .../shared_ptr_Y_rv.pass.cpp | 16 +- .../shared_ptr_rv.pass.cpp | 16 +- .../unique_ptr.pass.cpp | 3 +- .../weak_ptr.pass.cpp | 7 +- .../make_shared.pass.cpp | 3 +- .../weak_ptr.pass.cpp | 6 +- .../meta/meta.help/integral_constant.pass.cpp | 4 +- .../remove_all_extents.pass.cpp | 4 +- .../meta.trans.arr/remove_extent.pass.cpp | 4 +- .../meta.trans.cv/add_const.pass.cpp | 4 +- .../meta.trans/meta.trans.cv/add_cv.pass.cpp | 4 +- .../meta.trans.cv/add_volatile.pass.cpp | 4 +- .../meta.trans.cv/remove_const.pass.cpp | 4 +- .../meta.trans.cv/remove_cv.pass.cpp | 4 +- .../meta.trans.cv/remove_volatile.pass.cpp | 4 +- .../meta.trans.other/aligned_union.pass.cpp | 20 +- .../meta.trans.other/common_type.pass.cpp | 209 +- .../meta.trans.other/conditional.pass.cpp | 4 +- .../meta.trans.other/decay.pass.cpp | 4 +- .../meta.trans.other/enable_if.pass.cpp | 4 +- .../meta.trans.other/underlying_type.pass.cpp | 13 +- .../meta.trans.ref/add_rvalue_ref.pass.cpp | 11 +- .../meta.trans.ref/remove_ref.pass.cpp | 4 +- .../meta.trans.sign/make_signed.pass.cpp | 8 +- .../meta.trans.sign/make_unsigned.pass.cpp | 8 +- .../void_t_feature_test_macro.pass.cpp | 36 + .../meta.unary.cat/lvalue_ref.pass.cpp | 4 +- ...ber_function_pointer_no_variadics.pass.cpp | 4 +- .../meta.unary.cat/rvalue_ref.pass.cpp | 4 +- .../meta.unary.comp/rvalue_ref.pass.cpp | 4 +- .../meta.unary.prop/is_assignable.pass.cpp | 7 +- .../meta.unary.prop/is_constructible.pass.cpp | 193 +- .../is_copy_assignable.pass.cpp | 4 +- .../is_default_constructible.pass.cpp | 20 + .../meta.unary.prop/is_empty.pass.cpp | 36 +- .../is_move_assignable.pass.cpp | 2 +- .../is_move_constructible.pass.cpp | 2 +- .../is_nothrow_assignable.pass.cpp | 2 +- .../is_nothrow_constructible.pass.cpp | 9 +- .../is_nothrow_swappable_with.pass.cpp | 2 +- .../default.pass.cpp | 23 + .../derive.pass.cpp | 25 + .../optional.comp_with_t/equal.pass.cpp | 53 + .../optional.comp_with_t/greater.pass.cpp | 55 + .../greater_equal.pass.cpp | 55 + .../optional.comp_with_t/less_equal.pass.cpp | 55 + .../optional.comp_with_t/less_than.pass.cpp | 55 + .../optional.comp_with_t/not_equal.pass.cpp | 53 + .../optional/optional.hash/hash.pass.cpp | 48 + .../optional/optional.nullops/equal.pass.cpp | 39 + .../optional.nullops/greater.pass.cpp | 39 + .../optional.nullops/greater_equal.pass.cpp | 39 + .../optional.nullops/less_equal.pass.cpp | 40 + .../optional.nullops/less_than.pass.cpp | 39 + .../optional.nullops/not_equal.pass.cpp | 39 + .../not_brace_initializable.fail.cpp | 25 + .../optional.nullopt/nullopt_t.pass.cpp | 38 + .../assign_value.pass.cpp | 273 + .../const_optional_U.pass.cpp | 254 + .../optional.object.assign/copy.pass.cpp | 102 + .../optional.object.assign/emplace.pass.cpp | 237 + .../emplace_initializer_list.pass.cpp | 113 + .../optional.object.assign/move.pass.cpp | 174 + .../optional.object.assign/nullopt_t.pass.cpp | 67 + .../optional_U.pass.cpp | 268 + .../optional.object.ctor/U.pass.cpp | 143 + .../optional.object.ctor/const_T.pass.cpp | 128 + .../const_optional_U.pass.cpp | 134 + .../optional.object.ctor/copy.pass.cpp | 155 + .../optional.object.ctor/default.pass.cpp | 81 + .../explicit_const_optional_U.pass.cpp | 121 + .../explicit_optional_U.pass.cpp | 84 + .../optional.object.ctor/in_place_t.pass.cpp | 148 + .../initializer_list.pass.cpp | 116 + .../optional.object.ctor/move.pass.cpp | 201 + .../optional.object.ctor/nullopt_t.pass.cpp | 73 + .../optional.object.ctor/optional_U.pass.cpp | 93 + .../optional.object.ctor/rvalue_T.pass.cpp | 153 + .../optional.object.dtor/dtor.pass.cpp | 68 + .../optional.object.mod/reset.pass.cpp | 61 + .../optional.object.observe/bool.pass.cpp | 37 + .../dereference.pass.cpp | 73 + .../dereference_const.pass.cpp | 69 + .../dereference_const_rvalue.pass.cpp | 69 + .../dereference_rvalue.pass.cpp | 73 + .../has_value.pass.cpp | 37 + .../optional.object.observe/op_arrow.pass.cpp | 72 + .../op_arrow_const.pass.cpp | 76 + .../optional.object.observe/value.pass.cpp | 73 + .../value_const.fail.cpp} | 33 +- .../value_const.pass.cpp | 64 + .../value_const_rvalue.pass.cpp | 64 + .../optional.object.observe/value_or.pass.cpp | 68 + .../value_or_const.pass.cpp | 77 + .../value_rvalue.pass.cpp | 72 + .../optional.object.swap/swap.pass.cpp | 306 + ...onal_requires_destructible_object.fail.cpp | 50 + .../special_member_gen.pass.cpp | 74 + .../optional/optional.object/types.pass.cpp | 38 + .../optional/optional.relops/equal.pass.cpp | 74 + .../optional.relops/greater_equal.pass.cpp | 70 + .../optional.relops/greater_than.pass.cpp | 70 + .../optional.relops/less_equal.pass.cpp | 70 + .../optional.relops/less_than.pass.cpp | 70 + .../optional.relops/not_equal.pass.cpp | 74 + .../optional.specalg/make_optional.pass.cpp | 51 + .../make_optional_explicit.pass.cpp | 45 + ...ptional_explicit_initializer_list.pass.cpp | 53 + .../optional/optional.specalg/swap.pass.cpp | 352 + .../optional.syn/optional_in_place_t.fail.cpp | 26 + ...tional_includes_initializer_list.pass.cpp} | 17 +- .../optional.syn/optional_nullopt_t.fail.cpp | 29 + .../bitset.cons/ull_ctor.pass.cpp | 5 +- .../bitset.members/flip_one.pass.cpp | 31 +- .../bitset.members/reset_one.pass.cpp | 31 +- .../bitset.members/set_one.pass.cpp | 35 +- .../bitset.members/test.pass.cpp | 31 +- .../bitset.operators/op_and.pass.cpp | 2 +- .../bitset.operators/op_not.pass.cpp | 2 +- .../bitset.operators/op_or.pass.cpp | 2 +- test/std/utilities/time/rep.h | 10 +- .../time.point.cast/time_point_cast.pass.cpp | 6 +- .../time.point.comparisons/op_equal.pass.cpp | 4 +- .../time.point.comparisons/op_less.pass.cpp | 4 +- .../time.point.cons/convert.pass.cpp | 4 +- .../time.point.cons/default.pass.cpp | 3 +- .../time.point.cons/duration.pass.cpp | 4 +- .../time.point.nonmember/op_+.pass.cpp | 4 +- .../op_-duration.pass.cpp | 17 +- .../op_-time_point.pass.cpp | 4 +- .../tuple.tuple/tuple.apply/apply.pass.cpp | 5 +- .../tuple.apply/make_from_tuple.pass.cpp | 8 +- .../tuple.assign/const_pair.pass.cpp | 6 +- .../tuple.assign/convert_copy.pass.cpp | 26 +- .../tuple.assign/convert_move.pass.cpp | 34 +- .../tuple.tuple/tuple.assign/copy.pass.cpp | 50 + .../tuple.tuple/tuple.assign/move.pass.cpp | 69 + .../tuple.assign/move_pair.pass.cpp | 6 +- .../PR23256_constrain_UTypes_ctor.pass.cpp | 2 + .../tuple.tuple/tuple.cnstr/PR31384.pass.cpp | 88 + .../tuple.tuple/tuple.cnstr/UTypes.pass.cpp | 24 +- .../tuple.cnstr/alloc_const_pair.pass.cpp | 4 +- .../tuple.cnstr/alloc_convert_copy.pass.cpp | 12 +- .../tuple.cnstr/const_Types.pass.cpp | 6 +- .../tuple.cnstr/const_pair.pass.cpp | 18 +- .../tuple.cnstr/convert_copy.pass.cpp | 40 +- .../tuple.cnstr/convert_move.pass.cpp | 30 +- .../tuple.tuple/tuple.cnstr/copy.pass.cpp | 4 +- .../tuple.tuple/tuple.cnstr/dtor.pass.cpp | 35 + .../tuple.tuple/tuple.cnstr/move.pass.cpp | 2 +- .../tuple.cnstr/move_pair.pass.cpp | 6 +- .../tuple.creation/forward_as_tuple.pass.cpp | 6 +- .../tuple.creation/make_tuple.pass.cpp | 4 +- .../tuple.tuple/tuple.creation/tie.pass.cpp | 4 +- .../tuple.creation/tuple_cat.pass.cpp | 3 +- .../tuple.tuple/tuple.elem/get_const.pass.cpp | 4 +- .../tuple.elem/get_const_rv.fail.cpp | 2 +- .../tuple.elem/get_non_const.pass.cpp | 2 +- .../tuple.helper/tuple_element.pass.cpp | 4 +- .../tuple.helper/tuple_size.fail.cpp | 6 +- .../tuple.helper/tuple_size.pass.cpp | 26 + .../tuple.helper/tuple_size_v.fail.cpp | 2 +- .../tuple/tuple.tuple/tuple.rel/eq.pass.cpp | 56 +- .../tuple/tuple.tuple/tuple.rel/lt.pass.cpp | 62 +- .../utility/exchange/exchange.pass.cpp | 4 +- .../utility/forward/forward.fail.cpp | 53 + .../utility/forward/forward.pass.cpp | 104 +- .../utility/forward/forward5.fail.cpp | 25 - .../utility/forward/forward_03.pass.cpp | 58 + .../{move_only.pass.cpp => move.fail.cpp} | 21 +- .../utilities/utility/forward/move.pass.cpp | 121 + .../utility/forward/move_copy.pass.cpp | 61 - .../utility/forward/move_only1.fail.cpp | 52 - .../utility/forward/move_only2.fail.cpp | 52 - .../utility/forward/move_only3.fail.cpp | 49 - .../utility/forward/move_only4.fail.cpp | 52 - .../pairs/pair.astuple/get_const.pass.cpp | 4 +- .../pairs/pair.astuple/get_const_rv.pass.cpp | 4 +- .../pairs/pair.astuple/get_non_const.pass.cpp | 2 +- .../pairs/pair.astuple/get_rv.pass.cpp | 6 +- .../utility/pairs/pairs.pair/U_V.pass.cpp | 74 +- .../pairs.pair/assign_const_pair_U_V.pass.cpp | 2 +- .../pairs/pairs.pair/assign_pair.pass.cpp | 101 + .../pairs.pair/assign_pair_cxx03.pass.cpp | 49 + .../pairs/pairs.pair/assign_rv_pair.pass.cpp | 68 +- .../pairs.pair/assign_rv_pair_U_V.pass.cpp | 6 +- .../pairs/pairs.pair/assign_tuple.pass.cpp | 140 + .../const_first_const_second.pass.cpp | 76 +- .../const_first_const_second_cxx03.pass.cpp | 42 + .../pairs/pairs.pair/const_pair_U_V.pass.cpp | 149 +- .../pairs.pair/const_pair_U_V_cxx03.pass.cpp | 29 + .../pairs/pairs.pair/copy_ctor.pass.cpp | 4 +- .../utility/pairs/pairs.pair/default.pass.cpp | 16 +- .../utility/pairs/pairs.pair/dtor.pass.cpp | 32 + .../pairs/pairs.pair/move_ctor.pass.cpp | 2 +- .../pairs.pair/not_constexpr_cxx11.fail.cpp | 57 + .../pairs/pairs.pair/rv_pair_U_V.pass.cpp | 139 +- .../special_member_generation_test.pass.cpp | 127 + .../utility/pairs/pairs.pair/swap.pass.cpp | 4 +- .../pairs.pair/trivial_copy_move.pass.cpp | 6 + .../pairs/pairs.spec/comparison.pass.cpp | 28 +- .../pairs/pairs.spec/make_pair.pass.cpp | 17 +- .../pairs/pairs.spec/non_member_swap.pass.cpp | 4 +- .../utility/utility.inplace/inplace.pass.cpp | 74 + .../bad_variant_access.pass.cpp | 37 + .../variant.general/nothing_to_do.pass.cpp | 11 + .../variant/variant.get/get_if_index.pass.cpp | 132 + .../variant/variant.get/get_if_type.pass.cpp | 130 + .../variant/variant.get/get_index.pass.cpp | 287 + .../variant/variant.get/get_type.pass.cpp | 287 + .../variant.get/holds_alternative.pass.cpp | 38 + .../variant/variant.hash/hash.pass.cpp | 124 + .../variant_alternative.pass.cpp | 77 + .../variant.helpers/variant_size.pass.cpp | 44 + .../variant.monostate.relops/relops.pass.cpp | 55 + .../variant.monostate/monostate.pass.cpp | 28 + .../variant/variant.relops/relops.pass.cpp | 227 + .../variant.synopsis/variant_npos.pass.cpp | 21 + .../variant.variant/variant.assign/T.pass.cpp | 232 + .../variant.assign/copy.pass.cpp | 397 ++ .../variant.assign/move.pass.cpp | 319 + .../variant.variant/variant.ctor/T.pass.cpp | 112 + .../variant.ctor/copy.pass.cpp | 159 + .../variant.ctor/default.pass.cpp | 112 + .../variant.ctor/in_place_index_args.pass.cpp | 103 + .../in_place_index_init_list_args.pass.cpp | 103 + .../variant.ctor/in_place_type_args.pass.cpp | 113 + .../in_place_type_init_list_args.pass.cpp | 110 + .../variant.ctor/move.pass.cpp | 197 + .../variant.dtor/dtor.pass.cpp | 75 + .../variant.mod/emplace_index_args.pass.cpp | 137 + .../emplace_index_init_list_args.pass.cpp | 85 + .../variant.mod/emplace_type_args.pass.cpp | 138 + .../emplace_type_init_list_args.pass.cpp | 85 + .../variant.status/index.pass.cpp | 58 + .../valueless_by_exception.pass.cpp | 51 + .../variant.swap/swap.pass.cpp | 591 ++ .../variant.variant/variant_array.fail.cpp | 33 + .../variant.variant/variant_empty.fail.cpp | 26 + .../variant_reference.fail.cpp | 28 + .../variant.variant/variant_void.fail.cpp | 33 + .../variant/variant.visit/visit.pass.cpp | 291 + test/support/any_helpers.h | 163 +- test/support/archetypes.hpp | 379 ++ test/support/archetypes.ipp | 169 + test/support/container_test_types.h | 2 +- test/support/controlled_allocators.hpp | 502 ++ test/support/count_new.hpp | 26 +- test/support/debug_mode_helper.h | 382 ++ test/support/demangle.h | 49 + test/support/experimental_any_helpers.h | 326 + test/support/external_threads.cpp | 10 + test/support/filesystem_test_helper.hpp | 1 + test/support/is_transparent.h | 4 +- test/support/min_allocator.h | 38 + test/support/nasty_containers.hpp | 98 +- .../test.support/test_demangle.pass.cpp | 38 + .../test_macros_header_rtti.pass.cpp | 1 + test/support/test_allocator.h | 157 +- test/support/test_iterators.h | 24 +- test/support/test_macros.h | 79 +- test/support/test_memory_resource.hpp | 354 +- test/support/type_id.h | 52 +- test/support/uses_alloc_types.hpp | 168 +- test/support/variant_test_helpers.hpp | 81 + test/ubsan_blacklist.txt | 1 - utils/gen_link_script/gen_link_script.py | 24 +- utils/google-benchmark/.gitignore | 46 + utils/google-benchmark/AUTHORS | 35 + utils/google-benchmark/CMakeLists.txt | 179 + utils/google-benchmark/CONTRIBUTING.md | 58 + utils/google-benchmark/CONTRIBUTORS | 53 + utils/google-benchmark/LICENSE | 202 + utils/google-benchmark/README.LLVM | 6 + utils/google-benchmark/README.md | 597 ++ .../cmake/AddCXXCompilerFlag.cmake | 37 + .../cmake/CXXFeatureCheck.cmake | 44 + .../cmake/GetGitVersion.cmake | 51 + .../cmake/gnu_posix_regex.cpp | 12 + utils/google-benchmark/cmake/posix_regex.cpp | 14 + utils/google-benchmark/cmake/std_regex.cpp | 10 + utils/google-benchmark/cmake/steady_clock.cpp | 7 + .../cmake/thread_safety_attributes.cpp | 4 + .../include/benchmark/benchmark.h | 21 + .../include/benchmark/benchmark_api.h | 864 +++ .../include/benchmark/macros.h | 66 + .../include/benchmark/reporter.h | 219 + utils/google-benchmark/src/CMakeLists.txt | 44 + utils/google-benchmark/src/arraysize.h | 33 + utils/google-benchmark/src/benchmark.cc | 667 ++ .../src/benchmark_api_internal.h | 47 + .../src/benchmark_register.cc | 439 ++ utils/google-benchmark/src/check.h | 71 + utils/google-benchmark/src/colorprint.cc | 188 + utils/google-benchmark/src/colorprint.h | 33 + .../google-benchmark/src/commandlineflags.cc | 218 + utils/google-benchmark/src/commandlineflags.h | 79 + utils/google-benchmark/src/complexity.cc | 284 + utils/google-benchmark/src/complexity.h | 61 + .../google-benchmark/src/console_reporter.cc | 132 + utils/google-benchmark/src/csv_reporter.cc | 108 + utils/google-benchmark/src/cycleclock.h | 145 + utils/google-benchmark/src/internal_macros.h | 42 + utils/google-benchmark/src/json_reporter.cc | 163 + utils/google-benchmark/src/log.h | 73 + utils/google-benchmark/src/mutex.h | 155 + utils/google-benchmark/src/re.h | 126 + utils/google-benchmark/src/reporter.cc | 68 + utils/google-benchmark/src/sleep.cc | 50 + utils/google-benchmark/src/sleep.h | 17 + utils/google-benchmark/src/stat.h | 306 + utils/google-benchmark/src/string_util.cc | 168 + utils/google-benchmark/src/string_util.h | 40 + utils/google-benchmark/src/sysinfo.cc | 348 + utils/google-benchmark/src/sysinfo.h | 10 + utils/google-benchmark/src/timers.cc | 195 + utils/google-benchmark/src/timers.h | 48 + utils/google-benchmark/test/CMakeLists.txt | 139 + utils/google-benchmark/test/basic_test.cc | 99 + utils/google-benchmark/test/benchmark_test.cc | 241 + .../google-benchmark/test/complexity_test.cc | 167 + utils/google-benchmark/test/cxx03_test.cc | 42 + .../google-benchmark/test/diagnostics_test.cc | 64 + .../test/donotoptimize_test.cc | 33 + utils/google-benchmark/test/filter_test.cc | 104 + utils/google-benchmark/test/fixture_test.cc | 49 + utils/google-benchmark/test/map_test.cc | 56 + .../test/multiple_ranges_test.cc | 74 + utils/google-benchmark/test/options_test.cc | 43 + utils/google-benchmark/test/output_test.h | 71 + .../test/output_test_helper.cc | 234 + .../test/register_benchmark_test.cc | 148 + .../test/reporter_output_test.cc | 256 + .../test/skip_with_error_test.cc | 150 + utils/google-benchmark/tools/compare_bench.py | 30 + .../tools/gbench/Inputs/test1_run1.json | 46 + .../tools/gbench/Inputs/test1_run2.json | 46 + .../google-benchmark/tools/gbench/__init__.py | 8 + utils/google-benchmark/tools/gbench/report.py | 141 + utils/google-benchmark/tools/gbench/util.py | 130 + utils/merge_archives.py | 130 + utils/sym_check/sym_check/extract.py | 10 +- utils/sym_check/sym_check/util.py | 169 +- utils/sym_check/sym_diff.py | 13 + utils/sym_check/sym_extract.py | 5 + www/cxx1z_status.html | 158 +- www/debug_mode.html | 162 - www/index.html | 6 - www/results.Linux.html | 513 -- www/results.Windows.html | 487 -- www/upcoming_meeting.html | 222 +- 2037 files changed, 100058 insertions(+), 13846 deletions(-) create mode 100644 .clang-format create mode 100644 NOTES.TXT create mode 100644 benchmarks/CMakeLists.txt create mode 100644 benchmarks/ContainerBenchmarks.hpp create mode 100644 benchmarks/GenerateInput.hpp create mode 100644 benchmarks/algorithms.bench.cpp create mode 100644 benchmarks/filesystem.bench.cpp create mode 100644 benchmarks/string.bench.cpp create mode 100644 benchmarks/util_smartptr.bench.cpp create mode 100644 benchmarks/vector_operations.bench.cpp create mode 100644 docs/DesignDocs/DebugMode.rst create mode 100644 docs/DesignDocs/VisibilityMacros.rst create mode 100644 include/__libcpp_version create mode 100644 include/__string create mode 100644 include/any create mode 100644 include/experimental/numeric create mode 100644 include/limits.h create mode 100644 include/locale.h create mode 100644 include/optional create mode 100644 include/stdint.h create mode 100644 include/string_view delete mode 100644 include/support/win32/math_win32.h create mode 100644 include/variant create mode 100644 lib/abi/3.9/x86_64-apple-darwin16.0.abilist create mode 100644 lib/abi/3.9/x86_64-linux-gnu.abilist create mode 100644 lib/abi/CHANGELOG.TXT create mode 100644 lib/abi/CMakeLists.txt create mode 100644 lib/abi/README.TXT create mode 100644 lib/abi/x86_64-apple-darwin16.0.0.abilist create mode 100644 lib/abi/x86_64-unknown-linux-gnu.abilist rename src/support/solaris/{xlocale.c => xlocale.cpp} (96%) create mode 100644 src/variant.cpp create mode 100644 test/libcxx/algorithms/debug_less.pass.cpp create mode 100644 test/libcxx/atomics/atomics.align/align.pass.sh.cpp delete mode 100644 test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp delete mode 100644 test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp delete mode 100644 test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp delete mode 100644 test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp delete mode 100644 test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp create mode 100644 test/libcxx/debug/containers/db_associative_container_tests.pass.cpp create mode 100644 test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp create mode 100644 test/libcxx/debug/containers/db_string.pass.cpp create mode 100644 test/libcxx/debug/containers/db_unord_container_tests.pass.cpp create mode 100644 test/libcxx/debug/debug_abort.pass.cpp create mode 100644 test/libcxx/debug/debug_throw.pass.cpp rename test/libcxx/{containers/sequences/list/db_cfront.pass.cpp => debug/debug_throw_register.pass.cpp} (62%) rename test/{std/utilities/utility/forward/forward1.fail.cpp => libcxx/depr/depr.c.headers/ciso646.pass.cpp} (71%) rename test/{std/utilities/utility/forward/forward3.fail.cpp => libcxx/depr/depr.c.headers/complex.h.pass.cpp} (71%) rename test/{std/utilities/utility/forward/forward4.fail.cpp => libcxx/depr/depr.c.headers/locale_h.pass.cpp} (69%) create mode 100644 test/libcxx/depr/depr.c.headers/tgmath_h.pass.cpp create mode 100644 test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp create mode 100644 test/libcxx/experimental/filesystem/class.path/path.member/path.append.pass.cpp create mode 100644 test/libcxx/language.support/support.dynamic/new_faligned_allocation.sh.cpp create mode 100644 test/libcxx/libcpp_version.pass.cpp create mode 100644 test/libcxx/modules/cinttypes_exports.sh.cpp create mode 100644 test/libcxx/modules/clocale_exports.sh.cpp create mode 100644 test/libcxx/modules/cstdint_exports.sh.cpp create mode 100644 test/libcxx/modules/inttypes_h_exports.sh.cpp create mode 100644 test/libcxx/modules/stdint_h_exports.sh.cpp create mode 100644 test/libcxx/numerics/c.math/constexpr-fns.pass.cpp create mode 100644 test/libcxx/numerics/c.math/ctgmath.pass.cpp create mode 100644 test/libcxx/numerics/c.math/tgmath_h.pass.cpp rename test/{std => libcxx}/numerics/c.math/version_cmath.pass.cpp (100%) create mode 100644 test/libcxx/numerics/complex.number/ccmplx/ccomplex.pass.cpp create mode 100644 test/libcxx/utilities/any/size_and_alignment.pass.cpp create mode 100644 test/libcxx/utilities/any/small_type.pass.cpp rename test/{std/utilities/utility/forward/forward6.fail.cpp => libcxx/utilities/any/version.pass.cpp} (80%) create mode 100644 test/libcxx/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp create mode 100644 test/libcxx/utilities/optional/optional.object/optional.object.assign/move.pass.cpp create mode 100644 test/libcxx/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp create mode 100644 test/libcxx/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp create mode 100644 test/libcxx/utilities/optional/optional.object/special_member_gen.pass.cpp create mode 100644 test/libcxx/utilities/optional/version.pass.cpp create mode 100644 test/libcxx/utilities/tuple/tuple.tuple/diagnose_reference_binding.fail.cpp create mode 100644 test/libcxx/utilities/tuple/tuple.tuple/diagnose_reference_binding.pass.cpp create mode 100644 test/libcxx/utilities/tuple/tuple.tuple/tuple.cnstr/disable_reduced_arity_initialization_extension.pass.cpp create mode 100644 test/libcxx/utilities/tuple/tuple.tuple/tuple.cnstr/enable_reduced_arity_initialization_extension.pass.cpp create mode 100644 test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp create mode 100644 test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp create mode 100644 test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp create mode 100644 test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp create mode 100644 test/libcxx/utilities/variant/version.pass.cpp create mode 100644 test/std/algorithms/alg.modifying.operations/alg.random.sample/sample.fail.cpp create mode 100644 test/std/algorithms/alg.modifying.operations/alg.random.sample/sample.pass.cpp create mode 100644 test/std/algorithms/alg.modifying.operations/alg.random.sample/sample.stable.pass.cpp create mode 100644 test/std/containers/sequences/deque/deque.capacity/max_size.pass.cpp create mode 100644 test/std/containers/sequences/list/list.capacity/max_size.pass.cpp create mode 100644 test/std/containers/sequences/vector/vector.capacity/max_size.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp delete mode 100644 test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp delete mode 100644 test/std/containers/stack_allocator.h create mode 100644 test/std/diagnostics/syserr/is_error_code_enum.pass.cpp create mode 100644 test/std/diagnostics/syserr/is_error_condition_enum.pass.cpp create mode 100644 test/std/diagnostics/syserr/syserr.hash/error_condition.pass.cpp create mode 100644 test/std/experimental/numeric/numeric.ops.overview/nothing_to_do.pass.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/nothing_to_do.pass.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.pass.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.not_integral1.fail.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.not_integral2.fail.cpp create mode 100644 test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.detect/detected_or.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.detect/detected_t.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.detect/is_detected.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.detect/is_detected_convertible.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.detect/is_detected_exact.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.logical/conjunction.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.logical/disjunction.pass.cpp create mode 100644 test/std/experimental/utilities/meta/meta.logical/negation.pass.cpp create mode 100644 test/std/input.output/iostreams.base/is_error_code_enum_io_errc.pass.cpp create mode 100644 test/std/language.support/support.dynamic/align_val_t.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp create mode 100644 test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp create mode 100644 test/std/numerics/complex.number/cmplx.over/UDT_is_rejected.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.pass.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.not_integral1.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.not_integral2.fail.cpp create mode 100644 test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.pass.cpp create mode 100644 test/std/re/re.const/re.matchflag/match_not_null.pass.cpp create mode 100644 test/std/re/re.regex/re.regex.construct/bad_backref.pass.cpp create mode 100644 test/std/re/re.regex/re.regex.construct/ptr_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.cons/T_size_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.cons/string_view.fail.cpp create mode 100644 test/std/strings/basic.string/string.cons/string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp create mode 100644 test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp create mode 100644 test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp create mode 100644 test/std/strings/string.view/nothing_to_do.pass.cpp create mode 100644 test/std/strings/string.view/string.view.access/at.pass.cpp create mode 100644 test/std/strings/string.view/string.view.access/back.pass.cpp create mode 100644 test/std/strings/string.view/string.view.access/data.pass.cpp create mode 100644 test/std/strings/string.view/string.view.access/front.pass.cpp create mode 100644 test/std/strings/string.view/string.view.access/index.pass.cpp create mode 100644 test/std/strings/string.view/string.view.capacity/capacity.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opeq.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opeq.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opeq.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opge.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opge.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opge.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opgt.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opgt.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opgt.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/ople.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/ople.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/ople.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/oplt.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/oplt.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/oplt.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opne.string_view.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opne.string_view.string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.comparison/opne.string_view.string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.cons/default.pass.cpp create mode 100644 test/std/strings/string.view/string.view.cons/from_literal.pass.cpp create mode 100644 test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp create mode 100644 test/std/strings/string.view/string.view.cons/from_string.pass.cpp create mode 100644 test/std/strings/string.view/string.view.cons/from_string1.fail.cpp create mode 100644 test/std/strings/string.view/string.view.cons/from_string2.fail.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.hash/string_view.pass.cpp create mode 100644 test/std/strings/string.view/string.view.io/stream_insert.pass.cpp create mode 100644 test/std/strings/string.view/string.view.iterators/begin.pass.cpp create mode 100644 test/std/strings/string.view/string.view.iterators/end.pass.cpp create mode 100644 test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp create mode 100644 test/std/strings/string.view/string.view.iterators/rend.pass.cpp create mode 100644 test/std/strings/string.view/string.view.modifiers/clear.pass.cpp create mode 100644 test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp create mode 100644 test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp create mode 100644 test/std/strings/string.view/string.view.modifiers/swap.pass.cpp create mode 100644 test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/copy.pass.cpp create mode 100644 test/std/strings/string.view/string.view.ops/substr.pass.cpp create mode 100644 test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp create mode 100644 test/std/strings/string.view/string.view.template/nothing_to_do.pass.cpp create mode 100644 test/std/thread/thread.condition/PR30202_notify_from_pthread_created_thread.pass.cpp create mode 100644 test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_const_lvalue_pair.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_piecewise.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_rvalue.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_values.pass.cpp create mode 100644 test/std/utilities/allocator.adaptor/allocator.adaptor.members/construct_type.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.assign/copy.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.assign/move.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.assign/value.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.cons/copy.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.cons/default.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.cons/in_place_type.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.cons/move.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.cons/value.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.modifiers/reset.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.observers/has_value.pass.cpp create mode 100644 test/std/utilities/any/any.class/any.observers/type.pass.cpp create mode 100644 test/std/utilities/any/any.class/not_literal_type.pass.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/any_cast_pointer.pass.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/any_cast_request_invalid_value_category.fail.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/const_correctness.fail.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/not_copy_constructible.fail.cpp create mode 100644 test/std/utilities/any/any.nonmembers/any.cast/reference_types.fail.cpp create mode 100644 test/std/utilities/any/any.nonmembers/make_any.pass.cpp create mode 100644 test/std/utilities/any/any.nonmembers/swap.pass.cpp create mode 100644 test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp create mode 100644 test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.fail.cpp create mode 100644 test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp create mode 100644 test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.fail.cpp rename test/{libcxx/containers/sequences/list/db_iterators_8.pass.cpp => std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.fail.cpp} (53%) rename test/{libcxx/containers/sequences/list/db_back.pass.cpp => std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.fail.cpp} (52%) rename test/{libcxx/containers/sequences/list/db_cback.pass.cpp => std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.fail.cpp} (54%) create mode 100644 test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.fail.cpp create mode 100644 test/std/utilities/function.objects/unord.hash/non_enum.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/specialized.addressof/addressof.temp.fail.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/specialized.destroy/destroy.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/specialized.destroy/destroy_at.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/specialized.destroy/destroy_n.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.construct.default/uninitialized_default_construct.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.construct.default/uninitialized_default_construct_n.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.construct.value/uninitialized_value_construct.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.construct.value/uninitialized_value_construct_n.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.move/uninitialized_move.pass.cpp create mode 100644 test/std/utilities/memory/specialized.algorithms/uninitialized.move/uninitialized_move_n.pass.cpp create mode 100644 test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp create mode 100644 test/std/utilities/optional/optional.bad_optional_access/default.pass.cpp create mode 100644 test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp create mode 100644 test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.hash/hash.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/greater.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/less_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/less_than.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullops/not_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.nullopt/not_brace_initializable.fail.cpp create mode 100644 test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/nullopt_t.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.assign/optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/explicit_const_optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/optional_U.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp rename test/{libcxx/containers/sequences/list/db_front.pass.cpp => std/utilities/optional/optional.object/optional.object.observe/value_const.fail.cpp} (52%) create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional.object.swap/swap.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/optional_requires_destructible_object.fail.cpp create mode 100644 test/std/utilities/optional/optional.object/special_member_gen.pass.cpp create mode 100644 test/std/utilities/optional/optional.object/types.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/greater_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/greater_than.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/less_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/less_than.pass.cpp create mode 100644 test/std/utilities/optional/optional.relops/not_equal.pass.cpp create mode 100644 test/std/utilities/optional/optional.specalg/make_optional.pass.cpp create mode 100644 test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp create mode 100644 test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp create mode 100644 test/std/utilities/optional/optional.specalg/swap.pass.cpp create mode 100644 test/std/utilities/optional/optional.syn/optional_in_place_t.fail.cpp rename test/std/utilities/{utility/forward/forward2.fail.cpp => optional/optional.syn/optional_includes_initializer_list.pass.cpp} (68%) create mode 100644 test/std/utilities/optional/optional.syn/optional_nullopt_t.fail.cpp create mode 100644 test/std/utilities/tuple/tuple.tuple/tuple.cnstr/PR31384.pass.cpp create mode 100644 test/std/utilities/tuple/tuple.tuple/tuple.cnstr/dtor.pass.cpp create mode 100644 test/std/utilities/utility/forward/forward.fail.cpp delete mode 100644 test/std/utilities/utility/forward/forward5.fail.cpp create mode 100644 test/std/utilities/utility/forward/forward_03.pass.cpp rename test/std/utilities/utility/forward/{move_only.pass.cpp => move.fail.cpp} (70%) create mode 100644 test/std/utilities/utility/forward/move.pass.cpp delete mode 100644 test/std/utilities/utility/forward/move_copy.pass.cpp delete mode 100644 test/std/utilities/utility/forward/move_only1.fail.cpp delete mode 100644 test/std/utilities/utility/forward/move_only2.fail.cpp delete mode 100644 test/std/utilities/utility/forward/move_only3.fail.cpp delete mode 100644 test/std/utilities/utility/forward/move_only4.fail.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/assign_pair.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/assign_pair_cxx03.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/const_first_const_second_cxx03.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V_cxx03.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/dtor.pass.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/not_constexpr_cxx11.fail.cpp create mode 100644 test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp create mode 100644 test/std/utilities/utility/utility.inplace/inplace.pass.cpp create mode 100644 test/std/utilities/variant/variant.bad_variant_access/bad_variant_access.pass.cpp create mode 100644 test/std/utilities/variant/variant.general/nothing_to_do.pass.cpp create mode 100644 test/std/utilities/variant/variant.get/get_if_index.pass.cpp create mode 100644 test/std/utilities/variant/variant.get/get_if_type.pass.cpp create mode 100644 test/std/utilities/variant/variant.get/get_index.pass.cpp create mode 100644 test/std/utilities/variant/variant.get/get_type.pass.cpp create mode 100644 test/std/utilities/variant/variant.get/holds_alternative.pass.cpp create mode 100644 test/std/utilities/variant/variant.hash/hash.pass.cpp create mode 100644 test/std/utilities/variant/variant.helpers/variant_alternative.pass.cpp create mode 100644 test/std/utilities/variant/variant.helpers/variant_size.pass.cpp create mode 100644 test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp create mode 100644 test/std/utilities/variant/variant.monostate/monostate.pass.cpp create mode 100644 test/std/utilities/variant/variant.relops/relops.pass.cpp create mode 100644 test/std/utilities/variant/variant.synopsis/variant_npos.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant_array.fail.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant_empty.fail.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant_reference.fail.cpp create mode 100644 test/std/utilities/variant/variant.variant/variant_void.fail.cpp create mode 100644 test/std/utilities/variant/variant.visit/visit.pass.cpp create mode 100644 test/support/archetypes.hpp create mode 100644 test/support/archetypes.ipp create mode 100644 test/support/controlled_allocators.hpp create mode 100644 test/support/debug_mode_helper.h create mode 100644 test/support/demangle.h create mode 100644 test/support/experimental_any_helpers.h create mode 100644 test/support/external_threads.cpp create mode 100644 test/support/test.support/test_demangle.pass.cpp create mode 100644 test/support/variant_test_helpers.hpp delete mode 100644 test/ubsan_blacklist.txt create mode 100644 utils/google-benchmark/.gitignore create mode 100644 utils/google-benchmark/AUTHORS create mode 100644 utils/google-benchmark/CMakeLists.txt create mode 100644 utils/google-benchmark/CONTRIBUTING.md create mode 100644 utils/google-benchmark/CONTRIBUTORS create mode 100644 utils/google-benchmark/LICENSE create mode 100644 utils/google-benchmark/README.LLVM create mode 100644 utils/google-benchmark/README.md create mode 100644 utils/google-benchmark/cmake/AddCXXCompilerFlag.cmake create mode 100644 utils/google-benchmark/cmake/CXXFeatureCheck.cmake create mode 100644 utils/google-benchmark/cmake/GetGitVersion.cmake create mode 100644 utils/google-benchmark/cmake/gnu_posix_regex.cpp create mode 100644 utils/google-benchmark/cmake/posix_regex.cpp create mode 100644 utils/google-benchmark/cmake/std_regex.cpp create mode 100644 utils/google-benchmark/cmake/steady_clock.cpp create mode 100644 utils/google-benchmark/cmake/thread_safety_attributes.cpp create mode 100644 utils/google-benchmark/include/benchmark/benchmark.h create mode 100644 utils/google-benchmark/include/benchmark/benchmark_api.h create mode 100644 utils/google-benchmark/include/benchmark/macros.h create mode 100644 utils/google-benchmark/include/benchmark/reporter.h create mode 100644 utils/google-benchmark/src/CMakeLists.txt create mode 100644 utils/google-benchmark/src/arraysize.h create mode 100644 utils/google-benchmark/src/benchmark.cc create mode 100644 utils/google-benchmark/src/benchmark_api_internal.h create mode 100644 utils/google-benchmark/src/benchmark_register.cc create mode 100644 utils/google-benchmark/src/check.h create mode 100644 utils/google-benchmark/src/colorprint.cc create mode 100644 utils/google-benchmark/src/colorprint.h create mode 100644 utils/google-benchmark/src/commandlineflags.cc create mode 100644 utils/google-benchmark/src/commandlineflags.h create mode 100644 utils/google-benchmark/src/complexity.cc create mode 100644 utils/google-benchmark/src/complexity.h create mode 100644 utils/google-benchmark/src/console_reporter.cc create mode 100644 utils/google-benchmark/src/csv_reporter.cc create mode 100644 utils/google-benchmark/src/cycleclock.h create mode 100644 utils/google-benchmark/src/internal_macros.h create mode 100644 utils/google-benchmark/src/json_reporter.cc create mode 100644 utils/google-benchmark/src/log.h create mode 100644 utils/google-benchmark/src/mutex.h create mode 100644 utils/google-benchmark/src/re.h create mode 100644 utils/google-benchmark/src/reporter.cc create mode 100644 utils/google-benchmark/src/sleep.cc create mode 100644 utils/google-benchmark/src/sleep.h create mode 100644 utils/google-benchmark/src/stat.h create mode 100644 utils/google-benchmark/src/string_util.cc create mode 100644 utils/google-benchmark/src/string_util.h create mode 100644 utils/google-benchmark/src/sysinfo.cc create mode 100644 utils/google-benchmark/src/sysinfo.h create mode 100644 utils/google-benchmark/src/timers.cc create mode 100644 utils/google-benchmark/src/timers.h create mode 100644 utils/google-benchmark/test/CMakeLists.txt create mode 100644 utils/google-benchmark/test/basic_test.cc create mode 100644 utils/google-benchmark/test/benchmark_test.cc create mode 100644 utils/google-benchmark/test/complexity_test.cc create mode 100644 utils/google-benchmark/test/cxx03_test.cc create mode 100644 utils/google-benchmark/test/diagnostics_test.cc create mode 100644 utils/google-benchmark/test/donotoptimize_test.cc create mode 100644 utils/google-benchmark/test/filter_test.cc create mode 100644 utils/google-benchmark/test/fixture_test.cc create mode 100644 utils/google-benchmark/test/map_test.cc create mode 100644 utils/google-benchmark/test/multiple_ranges_test.cc create mode 100644 utils/google-benchmark/test/options_test.cc create mode 100644 utils/google-benchmark/test/output_test.h create mode 100644 utils/google-benchmark/test/output_test_helper.cc create mode 100644 utils/google-benchmark/test/register_benchmark_test.cc create mode 100644 utils/google-benchmark/test/reporter_output_test.cc create mode 100644 utils/google-benchmark/test/skip_with_error_test.cc create mode 100644 utils/google-benchmark/tools/compare_bench.py create mode 100644 utils/google-benchmark/tools/gbench/Inputs/test1_run1.json create mode 100644 utils/google-benchmark/tools/gbench/Inputs/test1_run2.json create mode 100644 utils/google-benchmark/tools/gbench/__init__.py create mode 100644 utils/google-benchmark/tools/gbench/report.py create mode 100644 utils/google-benchmark/tools/gbench/util.py create mode 100755 utils/merge_archives.py delete mode 100644 www/debug_mode.html delete mode 100644 www/results.Linux.html delete mode 100644 www/results.Windows.html diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000000..b708c8117c6b --- /dev/null +++ b/.clang-format @@ -0,0 +1,11 @@ +BasedOnStyle: LLVM + +--- +Language: Cpp + +AlwaysBreakTemplateDeclarations: true + +# Disable formatting options which may break tests. +SortIncludes: false +ReflowComments: false +--- diff --git a/.gitignore b/.gitignore index b26d5f7aa908..49657ed8102f 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,10 @@ docs/_build/ # PyBuilder target/ + +# MSVC libraries test harness +env.lst +keep.lst + +# Editor by-products +.vscode/ diff --git a/CMakeLists.txt b/CMakeLists.txt index d618e8358cae..823bfb5cd9b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,23 +19,17 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ) -# Find the LLVM sources and simulate LLVM CMake options. -include(HandleOutOfTreeLLVM) -if (LIBCXX_BUILT_STANDALONE) +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) project(libcxx CXX C) set(PACKAGE_NAME libcxx) - set(PACKAGE_VERSION trunk-svn) + set(PACKAGE_VERSION 4.0.0svn) set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") set(PACKAGE_BUGREPORT "llvm-bugs@lists.llvm.org") -endif () -if (LIBCXX_BUILT_STANDALONE AND NOT LLVM_FOUND) - message(WARNING "UNSUPPORTED LIBCXX CONFIGURATION DETECTED: " - "llvm-config not found and LLVM_PATH not defined.\n" - "Reconfigure with -DLLVM_CONFIG=path/to/llvm-config " - "or -DLLVM_PATH=path/to/llvm-source-root.") + # Find the LLVM sources and simulate LLVM CMake options. + include(HandleOutOfTreeLLVM) endif() # Require out of source build. @@ -48,23 +42,49 @@ MACRO_ENSURE_OUT_OF_SOURCE_BUILD( #=============================================================================== # Setup CMake Options #=============================================================================== +include(CMakeDependentOption) # Basic options --------------------------------------------------------------- option(LIBCXX_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON) option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON) +option(LIBCXX_ENABLE_STATIC "Build libc++ as a static library." ON) option(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY "Build libc++experimental.a" ON) option(LIBCXX_ENABLE_FILESYSTEM "Build filesystem as part of libc++experimental.a" ${LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY}) option(LIBCXX_INCLUDE_TESTS "Build the libc++ tests." ${LLVM_INCLUDE_TESTS}) + +# Benchmark options ----------------------------------------------------------- +option(LIBCXX_INCLUDE_BENCHMARKS "Build the libc++ benchmarks and their dependancies" ON) +set(LIBCXX_BENCHMARK_NATIVE_STDLIB "" CACHE STRING + "Build the benchmarks against the specified native STL. + The value must be one of libc++/libstdc++") +set(LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN "" CACHE STRING + "Use alternate GCC toolchain when building the native benchmarks") + +if (LIBCXX_BENCHMARK_NATIVE_STDLIB) + if (NOT (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libc++" + OR LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++")) + message(FATAL_ERROR "Invalid value for LIBCXX_BENCHMARK_NATIVE_STDLIB: " + "'${LIBCXX_BENCHMARK_NATIVE_STDLIB}'") + endif() +endif() + option(LIBCXX_INCLUDE_DOCS "Build the libc++ documentation." ${LLVM_INCLUDE_DOCS}) set(LIBCXX_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING "Define suffix of library directory name (32/64)") option(LIBCXX_INSTALL_HEADERS "Install the libc++ headers." ON) option(LIBCXX_INSTALL_LIBRARY "Install the libc++ library." ON) option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON) -option(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY "Install libc++experimental.a" OFF) +cmake_dependent_option(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY + "Install libc++experimental.a" ON + "LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY;LIBCXX_INSTALL_LIBRARY" OFF) set(LIBCXX_ABI_VERSION 1 CACHE STRING "ABI version of libc++.") option(LIBCXX_ABI_UNSTABLE "Unstable ABI of libc++." OFF) +option(LIBCXX_USE_COMPILER_RT "Use compiler-rt instead of libgcc" OFF) + +if (NOT LIBCXX_ENABLE_SHARED AND NOT LIBCXX_ENABLE_STATIC) + message(FATAL_ERROR "libc++ must be built as either a shared or static library.") +endif() # ABI Library options --------------------------------------------------------- set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" CACHE STRING @@ -74,17 +94,24 @@ set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS ;${CXXABIS}) # Setup the default options if LIBCXX_CXX_ABI is not specified. if (NOT LIBCXX_CXX_ABI) - if (NOT DEFINED LIBCXX_BUILT_STANDALONE AND - IS_DIRECTORY "${CMAKE_SOURCE_DIR}/projects/libcxxabi") + find_path( + LIBCXX_LIBCXXABI_INCLUDES_INTERNAL + cxxabi.h + PATHS ${LLVM_MAIN_SRC_DIR}/projects/libcxxabi/include + ${LLVM_MAIN_SRC_DIR}/runtimes/libcxxabi/include + NO_DEFAULT_PATH + ) + if (NOT DEFINED LIBCXX_STANDALONE_BUILD AND + IS_DIRECTORY "${LIBCXX_LIBCXXABI_INCLUDES_INTERNAL}") set(LIBCXX_CXX_ABI_LIBNAME "libcxxabi") - set(LIBCXX_CXX_ABI_INCLUDE_PATHS "${CMAKE_SOURCE_DIR}/projects/libcxxabi/include") + set(LIBCXX_CXX_ABI_INCLUDE_PATHS "${LIBCXX_LIBCXXABI_INCLUDES_INTERNAL}") set(LIBCXX_CXX_ABI_INTREE 1) - else () + else() set(LIBCXX_CXX_ABI_LIBNAME "none") - endif () -else () + endif() +else() set(LIBCXX_CXX_ABI_LIBNAME "${LIBCXX_CXX_ABI}") -endif () +endif() # Use a static copy of the ABI library when linking libc++. This option # cannot be used with LIBCXX_ENABLE_ABI_LINKER_SCRIPT. @@ -129,6 +156,9 @@ option(LIBCXX_ENABLE_MONOTONIC_CLOCK This option may only be set to OFF when LIBCXX_ENABLE_THREADS=OFF." ON) option(LIBCXX_HAS_MUSL_LIBC "Build libc++ with support for the Musl C library" OFF) option(LIBCXX_HAS_PTHREAD_API "Ignore auto-detection and force use of pthread API" OFF) +option(LIBCXX_HAS_EXTERNAL_THREAD_API + "Build libc++ with an externalized threading API. + This option may only be set to ON when LIBCXX_ENABLE_THREADS=ON." OFF) # Misc options ---------------------------------------------------------------- # FIXME: Turn -pedantic back ON. It is currently off because it warns @@ -186,6 +216,11 @@ if(LIBCXX_HAS_PTHREAD_API AND NOT LIBCXX_ENABLE_THREADS) " when LIBCXX_ENABLE_THREADS is also set to ON.") endif() +if(LIBCXX_HAS_EXTERNAL_THREAD_API AND NOT LIBCXX_ENABLE_THREADS) + message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_API can only be set to ON" + " when LIBCXX_ENABLE_THREADS is also set to ON.") +endif() + # Ensure LLVM_USE_SANITIZER is not specified when LIBCXX_GENERATE_COVERAGE # is ON. if (LLVM_USE_SANITIZER AND LIBCXX_GENERATE_COVERAGE) @@ -209,6 +244,9 @@ if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY) else() message(WARNING "LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option") endif() + if (LIBCXX_ENABLE_STATIC AND NOT PYTHONINTERP_FOUND) + message(FATAL_ERROR "LIBCXX_ENABLE_STATIC_ABI_LIBRARY requires python but it was not found.") + endif() endif() if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT) @@ -251,9 +289,13 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBCXX_LIBRARY_DIR}) # LIBCXX_CXX_FLAGS: General flags for both the compiler and linker. # LIBCXX_COMPILE_FLAGS: Compile only flags. # LIBCXX_LINK_FLAGS: Linker only flags. +# LIBCXX_LIBRARIES: libraries libc++ is linked to. +# LIBCXX_INTERFACE_LIBRARIES: Libraries that must be linked when using libc++ +# These libraries are exposed in the linker script. set(LIBCXX_COMPILE_FLAGS "") set(LIBCXX_LINK_FLAGS "") set(LIBCXX_LIBRARIES "") +set(LIBCXX_INTERFACE_LIBRARIES "") # Include macros for adding and removing libc++ flags. include(HandleLibcxxFlags) @@ -266,10 +308,17 @@ add_target_flags_if(LIBCXX_BUILD_32_BITS "-m32") add_target_flags_if(LIBCXX_TARGET_TRIPLE "-target ${LIBCXX_TARGET_TRIPLE}") add_target_flags_if(LIBCXX_SYSROOT "--sysroot=${LIBCXX_SYSROOT}") add_target_flags_if(LIBCXX_GCC_TOOLCHAIN "-gcc-toolchain ${LIBCXX_GCC_TOOLCHAIN}") +if (LIBCXX_TARGET_TRIPLE) + set(TARGET_TRIPLE "${LIBCXX_TARGET_TRIPLE}") +endif() # Configure compiler. include(config-ix) +if (LIBCXX_USE_COMPILER_RT) + list(APPEND LIBCXX_LINK_FLAGS "-rtlib=compiler-rt") +endif() + # Configure coverage options. if (LIBCXX_GENERATE_COVERAGE) include(CodeCoverage) @@ -284,9 +333,12 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) include(HandleLibCXXABI) # Setup the ABI library flags -# Remove flags that may have snuck in. -remove_flags(-DNDEBUG -UNDEBUG -D_DEBUG - -stdlib=libc++ -stdlib=libstdc++ -lc++abi -m32) +if (NOT LIBCXX_STANDALONE_BUILD) + # Remove flags that may have snuck in. + remove_flags(-DNDEBUG -UNDEBUG -D_DEBUG + -lc++abi -m32) +endif() +remove_flags(-stdlib=libc++ -stdlib=libstdc++) # FIXME(EricWF): See the FIXME on LIBCXX_ENABLE_PEDANTIC. # Remove the -pedantic flag and -Wno-pedantic and -pedantic-errors @@ -294,9 +346,18 @@ remove_flags(-DNDEBUG -UNDEBUG -D_DEBUG remove_flags(-Wno-pedantic -pedantic-errors -pedantic) # Required flags ============================================================== -add_compile_flags_if_supported(-std=c++11) -if (NOT MSVC AND NOT LIBCXX_SUPPORTS_STD_EQ_CXX11_FLAG) - message(FATAL_ERROR "C++11 is required but the compiler does not support -std=c++11") +set(LIBCXX_STANDARD_VER c++11 CACHE INTERNAL "internal option to change build dialect") +if (LIBCXX_HAS_MUSL_LIBC) + # musl's pthread implementations uses volatile types in their structs which is + # not a constexpr in C++11 but is in C++14, so we use C++14 with musl. + set(LIBCXX_STANDARD_VER c++14 CACHE INTERNAL "internal option to change build dialect") +endif() +add_compile_flags_if_supported(-std=${LIBCXX_STANDARD_VER}) +mangle_name("LIBCXX_SUPPORTS_STD_EQ_${LIBCXX_STANDARD_VER}_FLAG" SUPPORTS_DIALECT_NAME) +if(NOT ${SUPPORTS_DIALECT_NAME}) + if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" AND NOT "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") + message(FATAL_ERROR "C++11 or greater is required but the compiler does not support ${LIBCXX_STANDARD_VER}") + endif() endif() # On all systems the system c++ standard library headers need to be excluded. @@ -305,14 +366,30 @@ endif() # headers add_compile_flags_if_supported(-nostdinc++) +# Hide all inline function definitions which have not explicitly been marked +# visible. This prevents new definitions for inline functions from appearing in +# the dylib when get ODR used by another function. +add_compile_flags_if_supported(-fvisibility-inlines-hidden) + +# Let the library headers know they are currently being used to build the +# library. +add_definitions(-D_LIBCPP_BUILDING_LIBRARY) # Warning flags =============================================================== add_definitions(-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) add_compile_flags_if_supported( - -Wall -W -Wwrite-strings - -Wno-unused-parameter -Wno-long-long -Wno-user-defined-literals - -Wno-covered-switch-default + -Wall -Wextra -W -Wwrite-strings + -Wno-unused-parameter -Wno-long-long -Werror=return-type) +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + add_compile_flags_if_supported( + -Wno-user-defined-literals + -Wno-covered-switch-default) +elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + add_compile_flags_if_supported( + -Wno-literal-suffix + -Wno-c++14-compat) +endif() if (LIBCXX_ENABLE_WERROR) add_compile_flags_if_supported(-Werror) add_compile_flags_if_supported(-WX) @@ -346,6 +423,17 @@ if (NOT LIBCXX_ENABLE_RTTI) add_compile_flags_if_supported(-fno-rtti) endif() +# Threading flags ============================================================= +if (LIBCXX_HAS_EXTERNAL_THREAD_API AND LIBCXX_ENABLE_SHARED) + # Need to allow unresolved symbols if this is to work with shared library builds + if (APPLE) + add_link_flags("-undefined dynamic_lookup") + else() + # Relax this restriction from HandleLLVMOptions + string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + endif() +endif() + # Assertion flags ============================================================= define_if(LIBCXX_ENABLE_ASSERTIONS -UNDEBUG) define_if_not(LIBCXX_ENABLE_ASSERTIONS -DNDEBUG) @@ -357,11 +445,21 @@ endif() # Feature flags =============================================================== define_if(MSVC -D_CRT_SECURE_NO_WARNINGS) +# Modules flags =============================================================== +# FIXME The libc++ sources are fundamentally non-modular. They need special +# versions of the headers in order to provide C++03 and legacy ABI definitions. +# NOTE: The public headers can be used with modules in all other contexts. +if (LLVM_ENABLE_MODULES) + # Ignore that the rest of the modules flags are now unused. + add_compile_flags_if_supported(-Wno-unused-command-line-argument) + add_compile_flags(-fno-modules) +endif() + # Sanitizer flags ============================================================= -# Configure for sanitizers. If LIBCXX_BUILT_STANDALONE then we have to do +# Configure for sanitizers. If LIBCXX_STANDALONE_BUILD then we have to do # the flag translation ourselves. Othewise LLVM's CMakeList.txt will handle it. -if (LIBCXX_BUILT_STANDALONE) +if (LIBCXX_STANDALONE_BUILD) set(LLVM_USE_SANITIZER "" CACHE STRING "Define the sanitizer used to build the library and tests") # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC. @@ -407,16 +505,29 @@ config_define_if_not(LIBCXX_ENABLE_MONOTONIC_CLOCK _LIBCPP_HAS_NO_MONOTONIC_CLOC config_define_if_not(LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS) config_define_if(LIBCXX_HAS_PTHREAD_API _LIBCPP_HAS_THREAD_API_PTHREAD) +config_define_if(LIBCXX_HAS_EXTERNAL_THREAD_API _LIBCPP_HAS_THREAD_API_EXTERNAL) config_define_if(LIBCXX_HAS_MUSL_LIBC _LIBCPP_HAS_MUSL_LIBC) +# By default libc++ on Windows expects to use a shared library, which requires +# the headers to use DLL import/export semantics. However when building a +# static library only we modify the headers to disable DLL import/export. +if (DEFINED WIN32 AND LIBCXX_ENABLE_STATIC AND NOT LIBCXX_ENABLE_SHARED) + message(STATUS "Generating custom __config for non-DLL Windows build") + config_define(ON _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) +endif() + if (LIBCXX_NEEDS_SITE_CONFIG) - configure_file( - include/__config_site.in - ${LIBCXX_BINARY_DIR}/__config_site - @ONLY) + configure_file("include/__config_site.in" + "${LIBCXX_BINARY_DIR}/__config_site" + @ONLY) + # Provide the config definitions by included the generated __config_site # file at compile time. - add_compile_flags("-include ${LIBCXX_BINARY_DIR}/__config_site") + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") + add_compile_flags("/FI\"${LIBCXX_BINARY_DIR}/__config_site\"") + else() + add_compile_flags("-include ${LIBCXX_BINARY_DIR}/__config_site") + endif() endif() #=============================================================================== @@ -426,8 +537,13 @@ include_directories(include) add_subdirectory(include) add_subdirectory(lib) + +if (LIBCXX_INCLUDE_BENCHMARKS) + add_subdirectory(benchmarks) +endif() if (LIBCXX_INCLUDE_TESTS) add_subdirectory(test) + add_subdirectory(lib/abi) endif() if (LIBCXX_INCLUDE_DOCS) add_subdirectory(docs) diff --git a/NOTES.TXT b/NOTES.TXT new file mode 100644 index 000000000000..f0597de64ae8 --- /dev/null +++ b/NOTES.TXT @@ -0,0 +1,28 @@ +//===---------------------------------------------------------------------===// +// Notes relating to various libc++ tasks +//===---------------------------------------------------------------------===// + +This file contains notes about various libc++ tasks and processes. + +//===---------------------------------------------------------------------===// +// Post-Release TODO +//===---------------------------------------------------------------------===// + +These notes contain a list of things that must be done after branching for +an LLVM release. + +1. Update _LIBCPP_VERSION in `__config` +2. Update the __libcpp_version file. +3. Update the version number in `docs/conf.py` +4. Create ABI lists for the previous release under `lib/abi` + +//===---------------------------------------------------------------------===// +// Adding a new header TODO +//===---------------------------------------------------------------------===// + +These notes contain a list of things that must be done upon adding a new header +to libc++. + +1. Add a test under `test/libcxx` that the header defines `_LIBCPP_VERSION`. +2. Update `test/libcxx/double_include.sh.cpp` to include the new header. +3. Create a submodule in `include/module.modulemap` for the new header. diff --git a/TODO.TXT b/TODO.TXT index bdb94de343d6..998f81ba6eb8 100644 --- a/TODO.TXT +++ b/TODO.TXT @@ -1,46 +1,19 @@ This is meant to be a general place to list things that should be done "someday" -3.8 Release Goals -================= -* LFTS v1 (EricWF, MClow) -* Filesystem TS (EricWF) -* ASIO TS (MClow) -* Improvements (MClow) -* Setup ABI Versioning policy (EricWF) -* Fix PR19302 - Fix UB in list and __tree. - - -ABI Related Tasks -================= -* Explicitly manage and verify symbols exported from the dylib. -* Explore using namespaces for managing symbol visibility. -* Introduce and document ABI versioning/evolution policy. - CXX Runtime Library Tasks ========================= -* Cleanup #ifdef hell in sources files that supports the different ABI libraries. * Fix that CMake always link to /usr/lib/libc++abi.dylib on OS X. -* Fix selection of ABI symbol list on OS X. -* Have CMake generate linker scripts for libc++.so that it properly links the - runtime library. * Look into mirroring libsupc++'s typeinfo vtable layout when libsupc++/libstdc++ is used as the runtime library. -* Audit libraries that CMake links into libc++. Are they all required? * Investigate and document interoperability between libc++ and libstdc++ on linux. Do this for every supported c++ runtime library. Atomic Related Tasks ==================== -* Enable mixing of clang and GCC atomics internally. Currently some - parts of libc++ use atomics only when clang provides them. - (see memory@5380 for an example) -* Audit use of libatomic builtins in with GCC. * future should use for synchronization. Test Suite Tasks ================ -* Move all libc++ specific tests from test/std into test/libcxx. -* Improve how LIT handles compiler warnings. * Improve the quality and portability of the locale test data. * Convert failure tests to use Clang Verify. @@ -50,7 +23,4 @@ Misc Tasks * run clang-tidy on libc++ * Document the "conditionally-supported" bits of libc++ * Look at basic_string's move assignment operator, re LWG 2063 and POCMA -* libc++ is missing try_emplace * Put a static_assert in std::allocator to deny const/volatile types (LWG 2447) -* Document support (or lack of) for C++11 libraries in C++03. -* Document supported compilers. diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt new file mode 100644 index 000000000000..a4105be08340 --- /dev/null +++ b/benchmarks/CMakeLists.txt @@ -0,0 +1,154 @@ +include(ExternalProject) +include(CheckCXXCompilerFlag) + +#============================================================================== +# Build Google Benchmark for libc++ +#============================================================================== + +set(BENCHMARK_LIBCXX_COMPILE_FLAGS + -Wno-unused-command-line-argument + -nostdinc++ + -isystem ${LIBCXX_SOURCE_DIR}/include + -L${LIBCXX_LIBRARY_DIR} + -Wl,-rpath,${LIBCXX_LIBRARY_DIR} + ) +if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH) + list(APPEND BENCHMARK_LIBCXX_COMPILE_FLAGS + -L${LIBCXX_CXX_ABI_LIBRARY_PATH} + -Wl,-rpath,${LIBCXX_CXX_ABI_LIBRARY_PATH}) +endif() +split_list(BENCHMARK_LIBCXX_COMPILE_FLAGS) + +ExternalProject_Add(google-benchmark-libcxx + EXCLUDE_FROM_ALL ON + DEPENDS cxx + PREFIX benchmark-libcxx + SOURCE_DIR ${LIBCXX_SOURCE_DIR}/utils/google-benchmark + INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx + CMAKE_CACHE_ARGS + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_BUILD_TYPE:STRING=RELEASE + -DCMAKE_INSTALL_PREFIX:PATH= + -DCMAKE_CXX_FLAGS:STRING=${BENCHMARK_LIBCXX_COMPILE_FLAGS} + -DBENCHMARK_USE_LIBCXX:BOOL=ON + -DBENCHMARK_ENABLE_TESTING:BOOL=OFF) + +#============================================================================== +# Build Google Benchmark for the native stdlib +#============================================================================== +set(BENCHMARK_NATIVE_TARGET_FLAGS) +if (LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN) + set(BENCHMARK_NATIVE_TARGET_FLAGS + -gcc-toolchain ${LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN}) +endif() +split_list(BENCHMARK_NATIVE_TARGET_FLAGS) + +if (LIBCXX_BENCHMARK_NATIVE_STDLIB) + ExternalProject_Add(google-benchmark-native + EXCLUDE_FROM_ALL ON + PREFIX benchmark-native + SOURCE_DIR ${LIBCXX_SOURCE_DIR}/utils/google-benchmark + INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native + CMAKE_CACHE_ARGS + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS:STRING=${BENCHMARK_NATIVE_TARGET_FLAGS} + -DCMAKE_BUILD_TYPE:STRING=RELEASE + -DCMAKE_INSTALL_PREFIX:PATH= + -DBENCHMARK_ENABLE_TESTING:BOOL=OFF) +endif() + +#============================================================================== +# Benchmark tests configuration +#============================================================================== +add_custom_target(cxx-benchmarks) + +set(BENCHMARK_LIBCXX_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx) +set(BENCHMARK_NATIVE_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native) +set(BENCHMARK_TEST_COMPILE_FLAGS + -std=c++14 -O2 + -I${BENCHMARK_LIBCXX_INSTALL}/include + -I${LIBCXX_SOURCE_DIR}/test/support +) +set(BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS + -nostdinc++ + -isystem ${LIBCXX_SOURCE_DIR}/include + ${BENCHMARK_TEST_COMPILE_FLAGS} + -Wno-user-defined-literals +) +set(BENCHMARK_TEST_LIBCXX_LINK_FLAGS + -nodefaultlibs + -L${BENCHMARK_LIBCXX_INSTALL}/lib/ +) +set(BENCHMARK_TEST_NATIVE_COMPILE_FLAGS + ${BENCHMARK_NATIVE_TARGET_FLAGS} + ${BENCHMARK_TEST_COMPILE_FLAGS} +) +set(BENCHMARK_TEST_NATIVE_LINK_FLAGS + ${BENCHMARK_NATIVE_TARGET_FLAGS} + -L${BENCHMARK_NATIVE_INSTALL}/lib +) +split_list(BENCHMARK_TEST_COMPILE_FLAGS) +split_list(BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS) +split_list(BENCHMARK_TEST_LIBCXX_LINK_FLAGS) +split_list(BENCHMARK_TEST_NATIVE_COMPILE_FLAGS) +split_list(BENCHMARK_TEST_NATIVE_LINK_FLAGS) +macro(add_benchmark_test name source_file) + set(libcxx_target ${name}_libcxx) + add_executable(${libcxx_target} EXCLUDE_FROM_ALL ${source_file}) + add_dependencies(${libcxx_target} cxx google-benchmark-libcxx) + add_dependencies(cxx-benchmarks ${libcxx_target}) + if (LIBCXX_ENABLE_SHARED) + target_link_libraries(${libcxx_target} cxx_shared) + else() + target_link_libraries(${libcxx_target} cxx_static) + endif() + if (TARGET cxx_experimental) + target_link_libraries(${libcxx_target} cxx_experimental) + endif() + target_link_libraries(${libcxx_target} -lbenchmark) + set_target_properties(${libcxx_target} + PROPERTIES + OUTPUT_NAME "${name}.libcxx.out" + COMPILE_FLAGS "${BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS}" + LINK_FLAGS "${BENCHMARK_TEST_LIBCXX_LINK_FLAGS}") + if (LIBCXX_BENCHMARK_NATIVE_STDLIB) + set(native_target ${name}_native) + add_executable(${native_target} EXCLUDE_FROM_ALL ${source_file}) + add_dependencies(${native_target} google-benchmark-native + google-benchmark-libcxx) + target_link_libraries(${native_target} -lbenchmark) + if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++") + target_link_libraries(${native_target} -lstdc++fs) + elseif (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libc++") + target_link_libraries(${native_target} -lc++experimental) + endif() + if (LIBCXX_HAS_PTHREAD_LIB) + target_link_libraries(${native_target} -pthread) + endif() + add_dependencies(cxx-benchmarks ${native_target}) + set_target_properties(${native_target} + PROPERTIES + OUTPUT_NAME "${name}.native.out" + INCLUDE_DIRECTORIES "" + COMPILE_FLAGS "${BENCHMARK_TEST_NATIVE_COMPILE_FLAGS}" + LINK_FLAGS "${BENCHMARK_TEST_NATIVE_LINK_FLAGS}") + endif() +endmacro() + + +#============================================================================== +# Register Benchmark tests +#============================================================================== +file(GLOB BENCHMARK_TESTS "*.bench.cpp") +foreach(test_path ${BENCHMARK_TESTS}) + get_filename_component(test_file "${test_path}" NAME) + string(REPLACE ".bench.cpp" "" test_name "${test_file}") + if (NOT DEFINED ${test_name}_REPORTED) + message(STATUS "Adding Benchmark: ${test_file}") + # Only report the adding of the benchmark once. + set(${test_name}_REPORTED ON CACHE INTERNAL "") + endif() + add_benchmark_test(${test_name} ${test_file}) +endforeach() diff --git a/benchmarks/ContainerBenchmarks.hpp b/benchmarks/ContainerBenchmarks.hpp new file mode 100644 index 000000000000..dc268e7ebca3 --- /dev/null +++ b/benchmarks/ContainerBenchmarks.hpp @@ -0,0 +1,113 @@ +#ifndef BENCHMARK_CONTAINER_BENCHMARKS_HPP +#define BENCHMARK_CONTAINER_BENCHMARKS_HPP + +#include + +#include "benchmark/benchmark_api.h" + +namespace ContainerBenchmarks { + + +template +void BM_ConstructIterIter(benchmark::State& st, Container, GenInputs gen) { + auto in = gen(st.range(0)); + const auto begin = in.begin(); + const auto end = in.end(); + benchmark::DoNotOptimize(&in); + while (st.KeepRunning()) { + Container c(begin, end); + benchmark::DoNotOptimize(c.data()); + } +} + +template +void BM_InsertValue(benchmark::State& st, Container c, GenInputs gen) { + auto in = gen(st.range(0)); + const auto end = in.end(); + while (st.KeepRunning()) { + c.clear(); + for (auto it = in.begin(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.insert(*it).first)); + } + benchmark::ClobberMemory(); + } +} + +template +void BM_InsertValueRehash(benchmark::State& st, Container c, GenInputs gen) { + auto in = gen(st.range(0)); + const auto end = in.end(); + while (st.KeepRunning()) { + c.clear(); + c.rehash(16); + for (auto it = in.begin(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.insert(*it).first)); + } + benchmark::ClobberMemory(); + } +} + + +template +void BM_InsertDuplicate(benchmark::State& st, Container c, GenInputs gen) { + auto in = gen(st.range(0)); + const auto end = in.end(); + c.insert(in.begin(), in.end()); + benchmark::DoNotOptimize(&c); + benchmark::DoNotOptimize(&in); + while (st.KeepRunning()) { + for (auto it = in.begin(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.insert(*it).first)); + } + benchmark::ClobberMemory(); + } +} + + +template +void BM_EmplaceDuplicate(benchmark::State& st, Container c, GenInputs gen) { + auto in = gen(st.range(0)); + const auto end = in.end(); + c.insert(in.begin(), in.end()); + benchmark::DoNotOptimize(&c); + benchmark::DoNotOptimize(&in); + while (st.KeepRunning()) { + for (auto it = in.begin(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.emplace(*it).first)); + } + benchmark::ClobberMemory(); + } +} + +template +static void BM_Find(benchmark::State& st, Container c, GenInputs gen) { + auto in = gen(st.range(0)); + c.insert(in.begin(), in.end()); + benchmark::DoNotOptimize(&(*c.begin())); + const auto end = in.data() + in.size(); + while (st.KeepRunning()) { + for (auto it = in.data(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.find(*it))); + } + benchmark::ClobberMemory(); + } +} + +template +static void BM_FindRehash(benchmark::State& st, Container c, GenInputs gen) { + c.rehash(8); + auto in = gen(st.range(0)); + c.insert(in.begin(), in.end()); + benchmark::DoNotOptimize(&(*c.begin())); + const auto end = in.data() + in.size(); + while (st.KeepRunning()) { + for (auto it = in.data(); it != end; ++it) { + benchmark::DoNotOptimize(&(*c.find(*it))); + } + benchmark::ClobberMemory(); + } +} + +} // end namespace ContainerBenchmarks + +#endif // BENCHMARK_CONTAINER_BENCHMARKS_HPP diff --git a/benchmarks/GenerateInput.hpp b/benchmarks/GenerateInput.hpp new file mode 100644 index 000000000000..9d5adac4af4f --- /dev/null +++ b/benchmarks/GenerateInput.hpp @@ -0,0 +1,142 @@ +#ifndef BENCHMARK_GENERATE_INPUT_HPP +#define BENCHMARK_GENERATE_INPUT_HPP + +#include +#include +#include +#include +#include +#include + +static const char Letters[] = { + '0','1','2','3','4', + '5','6','7','8','9', + 'A','B','C','D','E','F', + 'G','H','I','J','K', + 'L','M','N','O','P', + 'Q','R','S','T','U', + 'V','W','X','Y','Z', + 'a','b','c','d','e','f', + 'g','h','i','j','k', + 'l','m','n','o','p', + 'q','r','s','t','u', + 'v','w','x','y','z' +}; +static const std::size_t LettersSize = sizeof(Letters); + +inline std::default_random_engine& getRandomEngine() { + static std::default_random_engine RandEngine(std::random_device{}()); + return RandEngine; +} + +inline char getRandomChar() { + std::uniform_int_distribution<> LettersDist(0, LettersSize-1); + return Letters[LettersDist(getRandomEngine())]; +} + +template +inline IntT getRandomInteger() { + std::uniform_int_distribution dist; + return dist(getRandomEngine()); +} + +inline std::string getRandomString(std::size_t Len) { + std::string str(Len, 0); + std::generate_n(str.begin(), Len, &getRandomChar); + return str; +} + +template +inline std::vector getDuplicateIntegerInputs(size_t N) { + std::vector inputs(N, static_cast(-1)); + return inputs; +} + +template +inline std::vector getSortedIntegerInputs(size_t N) { + std::vector inputs; + for (size_t i=0; i < N; i += 1) + inputs.push_back(i); + return inputs; +} + +template +std::vector getSortedLargeIntegerInputs(size_t N) { + std::vector inputs; + for (size_t i=0; i < N; ++i) { + inputs.push_back(i + N); + } + return inputs; +} + +template +std::vector getSortedTopBitsIntegerInputs(size_t N) { + std::vector inputs = getSortedIntegerInputs(N); + for (auto& E : inputs) E <<= ((sizeof(IntT) / 2) * CHAR_BIT); + return inputs; +} + +template +inline std::vector getReverseSortedIntegerInputs(size_t N) { + std::vector inputs; + std::size_t i = N; + while (i > 0) { + --i; + inputs.push_back(i); + } + return inputs; +} + +template +std::vector getPipeOrganIntegerInputs(size_t N) { + std::vector v; v.reserve(N); + for (size_t i = 0; i < N/2; ++i) v.push_back(i); + for (size_t i = N/2; i < N; ++i) v.push_back(N - i); + return v; +} + + +template +std::vector getRandomIntegerInputs(size_t N) { + std::vector inputs; + for (size_t i=0; i < N; ++i) { + inputs.push_back(getRandomInteger()); + } + return inputs; +} + +inline std::vector getDuplicateStringInputs(size_t N) { + std::vector inputs(N, getRandomString(1024)); + return inputs; +} + +inline std::vector getRandomStringInputs(size_t N) { + std::vector inputs; + for (size_t i=0; i < N; ++i) { + inputs.push_back(getRandomString(1024)); + } + return inputs; +} + +inline std::vector getSortedStringInputs(size_t N) { + std::vector inputs = getRandomStringInputs(N); + std::sort(inputs.begin(), inputs.end()); + return inputs; +} + +inline std::vector getReverseSortedStringInputs(size_t N) { + std::vector inputs = getSortedStringInputs(N); + std::reverse(inputs.begin(), inputs.end()); + return inputs; +} + +inline std::vector getRandomCStringInputs(size_t N) { + static std::vector inputs = getRandomStringInputs(N); + std::vector cinputs; + for (auto const& str : inputs) + cinputs.push_back(str.c_str()); + return cinputs; +} + + +#endif // BENCHMARK_GENERATE_INPUT_HPP diff --git a/benchmarks/algorithms.bench.cpp b/benchmarks/algorithms.bench.cpp new file mode 100644 index 000000000000..745cc1727184 --- /dev/null +++ b/benchmarks/algorithms.bench.cpp @@ -0,0 +1,62 @@ +#include +#include +#include + +#include "benchmark/benchmark_api.h" +#include "GenerateInput.hpp" + +constexpr std::size_t TestNumInputs = 1024; + +template +void BM_Sort(benchmark::State& st, GenInputs gen) { + using ValueType = typename decltype(gen(0))::value_type; + const auto in = gen(st.range(0)); + std::vector inputs[5]; + auto reset_inputs = [&]() { + for (auto& C : inputs) { + C = in; + benchmark::DoNotOptimize(C.data()); + } + }; + reset_inputs(); + while (st.KeepRunning()) { + for (auto& I : inputs) { + std::sort(I.data(), I.data() + I.size()); + benchmark::DoNotOptimize(I.data()); + } + st.PauseTiming(); + reset_inputs(); + benchmark::ClobberMemory(); + st.ResumeTiming(); + } +} + +BENCHMARK_CAPTURE(BM_Sort, random_uint32, + getRandomIntegerInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, sorted_ascending_uint32, + getSortedIntegerInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, sorted_descending_uint32, + getReverseSortedIntegerInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, single_element_uint32, + getDuplicateIntegerInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, pipe_organ_uint32, + getPipeOrganIntegerInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, random_strings, + getRandomStringInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, sorted_ascending_strings, + getSortedStringInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, sorted_descending_strings, + getReverseSortedStringInputs)->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_Sort, single_element_strings, + getDuplicateStringInputs)->Arg(TestNumInputs); + + +BENCHMARK_MAIN() diff --git a/benchmarks/filesystem.bench.cpp b/benchmarks/filesystem.bench.cpp new file mode 100644 index 000000000000..f7949a163a7f --- /dev/null +++ b/benchmarks/filesystem.bench.cpp @@ -0,0 +1,138 @@ +#include + +#include "benchmark/benchmark_api.h" +#include "GenerateInput.hpp" +#include "test_iterators.h" + +namespace fs = std::experimental::filesystem; + +static const size_t TestNumInputs = 1024; + + +template +void BM_PathConstructString(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + const path P(PP.native()); + benchmark::DoNotOptimize(P.native().data()); + } +} +BENCHMARK_CAPTURE(BM_PathConstructString, large_string, + getRandomStringInputs)->Arg(TestNumInputs); + + +template +void BM_PathConstructCStr(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + const path P(PP.native().c_str()); + benchmark::DoNotOptimize(P.native().data()); + } +} +BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string, + getRandomStringInputs)->Arg(TestNumInputs); + + +template