/ test / catch_array_01.pass.cpp
catch_array_01.pass.cpp
 1  //===---------------------- catch_array_01.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  // Can you have a catch clause of array type that catches anything?
10  
11  // GCC incorrectly allows array types to be caught by reference.
12  // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69372
13  // XFAIL: gcc
14  // UNSUPPORTED: no-exceptions
15  
16  #include <cassert>
17  
18  int main(int, char**)
19  {
20      typedef char Array[4];
21      Array a = {'H', 'i', '!', 0};
22      try
23      {
24          throw a;  // converts to char*
25          assert(false);
26      }
27      catch (Array& b)  // can't catch char*
28      {
29          assert(false);
30      }
31      catch (...)
32      {
33      }
34  
35      return 0;
36  }