1 //===-------------------------- test_aux_runtime_op_array_new.cpp ---------===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: no-exceptions
10 
11 #include <iostream>
12 #include <cxxabi.h>
13 
14 //  If the expression passed to operator new[] would result in an overflow, the
15 //  allocation function is not called, and a std::bad_array_new_length exception
16 //  is thrown instead (5.3.4p7).
17 bool bad_array_new_length_test() {
18     try {
19       // We test this directly because Clang does not currently codegen the
20       // correct call to __cxa_bad_array_new_length, so this test would result
21       // in passing -1 to ::operator new[], which would then throw a
22       // std::bad_alloc, causing the test to fail.
23       __cxxabiv1::__cxa_throw_bad_array_new_length();
24     } catch ( const std::bad_array_new_length &banl ) {
25       return true;
26     }
27     return false;
28 }
29 
30 int main() {
31     int ret_val = 0;
32 
33     if ( !bad_array_new_length_test ()) {
34         std::cerr << "Bad array new length test failed!" << std::endl;
35         ret_val = 1;
36     }
37 
38     return ret_val;
39 }
40