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

Reply via email to