This test tries to create a 2 GiB std::string, catching the bad_alloc
exception if the allocation fails. However, for no-exceptions builds
there is no way for the error to be reported, so this crashes with a
null pointer dereference.
Differential revision: https://reviews.llvm.org/D87682
//
// REQUIRES: long_tests
+// Unsupported for no-exceptions builds because they have no way to report an
+// allocation failure when attempting to allocate the 2GiB string.
+// UNSUPPORTED: no-exceptions
+
#include <sstream>
#include <cassert>
#include "test_macros.h"
int main(int, char**)
{
-#ifndef TEST_HAS_NO_EXCEPTIONS
try {
-#endif
std::string str(2147483648, 'a');
SB sb;
sb.str(str);
assert(sb.pubpbase() <= sb.pubpptr());
-#ifndef TEST_HAS_NO_EXCEPTIONS
}
catch (const std::length_error &) {} // maybe the string can't take 2GB
catch (const std::bad_alloc &) {} // maybe we don't have enough RAM
-#endif
return 0;
}