• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // Catching an exception thrown as nullptr was not properly handled before
10 // 2f984cab4fa7, which landed in macOS 10.13
11 // XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10|11|12}}
12 
13 // UNSUPPORTED: no-exceptions
14 
15 #include <cassert>
16 
17 #if __has_feature(cxx_nullptr)
18 
19 struct A
20 {
21     const int i;
22     int j;
23 };
24 
25 typedef const int A::*md1;
26 typedef       int A::*md2;
27 
test1()28 void test1()
29 {
30     try
31     {
32         throw nullptr;
33         assert(false);
34     }
35     catch (md2 p)
36     {
37         assert(!p);
38     }
39     catch (md1)
40     {
41         assert(false);
42     }
43 }
44 
test2()45 void test2()
46 {
47     try
48     {
49         throw nullptr;
50         assert(false);
51     }
52     catch (md1 p)
53     {
54         assert(!p);
55     }
56     catch (md2)
57     {
58         assert(false);
59     }
60 }
61 
62 #else
63 
test1()64 void test1()
65 {
66 }
67 
test2()68 void test2()
69 {
70 }
71 
72 #endif
73 
main(int,char **)74 int main(int, char**)
75 {
76     test1();
77     test2();
78 
79     return 0;
80 }
81