STL_MSFT created this revision. STL_MSFT added reviewers: EricWF, mclow.lists. STL_MSFT added a subscriber: cfe-commits.
[libcxx] [test] allocator<const T> is non-Standard. N4582 17.6.3.5 [allocator.requirements] says that allocators are given cv-unqualified object types, and N4582 20.9.9 [default.allocator] implies that allocator<const T> is ill-formed (due to colliding address() overloads). Therefore, tests for allocator<const T> should be marked as libcxx-specific (if not removed outright). https://reviews.llvm.org/D26813 Files: test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp test/std/utilities/memory/default.allocator/allocator_types.pass.cpp Index: test/std/utilities/memory/default.allocator/allocator_types.pass.cpp =================================================================== --- test/std/utilities/memory/default.allocator/allocator_types.pass.cpp +++ test/std/utilities/memory/default.allocator/allocator_types.pass.cpp @@ -32,6 +32,8 @@ #include <type_traits> #include <cstddef> +#include "test_macros.h" + int main() { static_assert((std::is_same<std::allocator<char>::size_type, std::size_t>::value), ""); @@ -45,7 +47,7 @@ std::allocator<int> >::value), ""); static_assert((std::is_same<std::allocator< char>::is_always_equal, std::true_type>::value), ""); - static_assert((std::is_same<std::allocator<const char>::is_always_equal, std::true_type>::value), ""); + LIBCPP_STATIC_ASSERT((std::is_same<std::allocator<const char>::is_always_equal, std::true_type>::value), ""); std::allocator<char> a; std::allocator<char> a2 = a; Index: test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp =================================================================== --- test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp +++ test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp @@ -16,6 +16,8 @@ #include <memory> #include <cassert> +#include "test_macros.h" + template <typename T> void test_max(size_t count) { @@ -27,23 +29,19 @@ } } -int main() +template <typename T> +void test() { - { // Bug 26812 -- allocating too large - typedef double T; - std::allocator<T> a; - test_max<T> (a.max_size() + 1); // just barely too large - test_max<T> (a.max_size() * 2); // significantly too large - test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow - test_max<T> ((size_t) -1); // way too large - } + // Bug 26812 -- allocating too large + std::allocator<T> a; + test_max<T> (a.max_size() + 1); // just barely too large + test_max<T> (a.max_size() * 2); // significantly too large + test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow + test_max<T> ((size_t) -1); // way too large +} - { - typedef const double T; - std::allocator<T> a; - test_max<T> (a.max_size() + 1); // just barely too large - test_max<T> (a.max_size() * 2); // significantly too large - test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow - test_max<T> ((size_t) -1); // way too large - } +int main() +{ + test<double>(); + LIBCPP_ONLY(test<const double>()); }
Index: test/std/utilities/memory/default.allocator/allocator_types.pass.cpp =================================================================== --- test/std/utilities/memory/default.allocator/allocator_types.pass.cpp +++ test/std/utilities/memory/default.allocator/allocator_types.pass.cpp @@ -32,6 +32,8 @@ #include <type_traits> #include <cstddef> +#include "test_macros.h" + int main() { static_assert((std::is_same<std::allocator<char>::size_type, std::size_t>::value), ""); @@ -45,7 +47,7 @@ std::allocator<int> >::value), ""); static_assert((std::is_same<std::allocator< char>::is_always_equal, std::true_type>::value), ""); - static_assert((std::is_same<std::allocator<const char>::is_always_equal, std::true_type>::value), ""); + LIBCPP_STATIC_ASSERT((std::is_same<std::allocator<const char>::is_always_equal, std::true_type>::value), ""); std::allocator<char> a; std::allocator<char> a2 = a; Index: test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp =================================================================== --- test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp +++ test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp @@ -16,6 +16,8 @@ #include <memory> #include <cassert> +#include "test_macros.h" + template <typename T> void test_max(size_t count) { @@ -27,23 +29,19 @@ } } -int main() +template <typename T> +void test() { - { // Bug 26812 -- allocating too large - typedef double T; - std::allocator<T> a; - test_max<T> (a.max_size() + 1); // just barely too large - test_max<T> (a.max_size() * 2); // significantly too large - test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow - test_max<T> ((size_t) -1); // way too large - } + // Bug 26812 -- allocating too large + std::allocator<T> a; + test_max<T> (a.max_size() + 1); // just barely too large + test_max<T> (a.max_size() * 2); // significantly too large + test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow + test_max<T> ((size_t) -1); // way too large +} - { - typedef const double T; - std::allocator<T> a; - test_max<T> (a.max_size() + 1); // just barely too large - test_max<T> (a.max_size() * 2); // significantly too large - test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow - test_max<T> ((size_t) -1); // way too large - } +int main() +{ + test<double>(); + LIBCPP_ONLY(test<const double>()); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits