43 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: no-exceptions10 11// ___cxa_throw_bad_array_new_length is re-exported from libc++ only starting12// in LLVM 9.13// XFAIL: using-built-library-before-llvm-914 15#include <cxxabi.h>16#include <new>17 18// If the expression passed to operator new[] would result in an overflow, the19// allocation function is not called, and a std::bad_array_new_length exception20// is thrown instead (5.3.4p7).21bool bad_array_new_length_test() {22 try {23 // We test this directly because Clang does not currently codegen the24 // correct call to __cxa_bad_array_new_length, so this test would result25 // in passing -1 to ::operator new[], which would then throw a26 // std::bad_alloc, causing the test to fail.27 __cxxabiv1::__cxa_throw_bad_array_new_length();28 } catch ( const std::bad_array_new_length &banl ) {29 return true;30 }31 return false;32}33 34int main(int, char**) {35 int ret_val = 0;36 37 if ( !bad_array_new_length_test ()) {38 ret_val = 1;39 }40 41 return ret_val;42}43