[libcxx] r221969 - Split string capacity test into two parts and mark one part as UNSUPPORTED when using sanitizers.

Eric Fiselier eric at efcs.ca
Thu Nov 13 19:16:13 PST 2014


Author: ericwf
Date: Thu Nov 13 21:16:12 2014
New Revision: 221969

URL: http://llvm.org/viewvc/llvm-project?rev=221969&view=rev
Log:
Split string capacity test into two parts and mark one part as UNSUPPORTED when using sanitizers.

The test is split such that:
- max_size.pass.cpp tests that string::resize() fails to allocator for max_size
  and max_size -1
- over_max_size.pass.cpp tests that string::resize() throws a length error for
  max_size + 1

The test was split into two because max_size.pass.cpp cannot pass with 
sanitizers but over_max_size.pass.cpp can.

Added:
    libcxx/trunk/test/strings/basic.string/string.capacity/over_max_size.pass.cpp
Modified:
    libcxx/trunk/test/strings/basic.string/string.capacity/max_size.pass.cpp

Modified: libcxx/trunk/test/strings/basic.string/string.capacity/max_size.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/strings/basic.string/string.capacity/max_size.pass.cpp?rev=221969&r1=221968&r2=221969&view=diff
==============================================================================
--- libcxx/trunk/test/strings/basic.string/string.capacity/max_size.pass.cpp (original)
+++ libcxx/trunk/test/strings/basic.string/string.capacity/max_size.pass.cpp Thu Nov 13 21:16:12 2014
@@ -11,6 +11,13 @@
 
 // size_type max_size() const;
 
+// NOTE: asan and msan will fail for one of two reasons
+// 1. If allocator_may_return_null=0 then they will fail because the allocation
+//    returns null.
+// 2. If allocator_may_return_null=1 then they will fail because the allocation
+//    is too large to succeed.
+// UNSUPPORTED: asan, msan
+
 #include <string>
 #include <cassert>
 
@@ -40,23 +47,11 @@ test2(const S& s)
 
 template <class S>
 void
-test3(const S& s)
-{
-    S s2(s);
-    const size_t sz = s2.max_size() + 1;
-    try { s2.resize(sz, 'x'); }
-    catch ( const std::length_error & ) { return ; }
-    assert ( false );
-}
-
-template <class S>
-void
 test(const S& s)
 {
     assert(s.max_size() >= s.size());
     test1(s);
     test2(s);
-    test3(s);
 }
 
 int main()

Added: libcxx/trunk/test/strings/basic.string/string.capacity/over_max_size.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/strings/basic.string/string.capacity/over_max_size.pass.cpp?rev=221969&view=auto
==============================================================================
--- libcxx/trunk/test/strings/basic.string/string.capacity/over_max_size.pass.cpp (added)
+++ libcxx/trunk/test/strings/basic.string/string.capacity/over_max_size.pass.cpp Thu Nov 13 21:16:12 2014
@@ -0,0 +1,47 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// size_type max_size() const;
+
+#include <string>
+#include <cassert>
+
+#include "min_allocator.h"
+
+template <class S>
+void
+test(const S& s)
+{
+    assert(s.max_size() >= s.size());
+    S s2(s);
+    const size_t sz = s2.max_size() + 1;
+    try { s2.resize(sz, 'x'); }
+    catch ( const std::length_error & ) { return ; }
+    assert ( false );
+}
+
+int main()
+{
+    {
+    typedef std::string S;
+    test(S());
+    test(S("123"));
+    test(S("12345678901234567890123456789012345678901234567890"));
+    }
+#if __cplusplus >= 201103L
+    {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    test(S());
+    test(S("123"));
+    test(S("12345678901234567890123456789012345678901234567890"));
+    }
+#endif
+}





More information about the cfe-commits mailing list