brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 3b4cea0 Raw
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