[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