blob: 417a2aa13b1e9475ab70655f9ce4934faacc07ee [file] [log] [blame]
Nico Weber6ceed442013-12-05 21:54:49 +00001//===--------------------- catch_const_pointer_nullptr.cpp ----------------===//
Marshall Clowa27b0cd2012-02-01 22:27:24 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include <cassert>
11
12#if __has_feature(cxx_nullptr)
13
14struct A {};
15
16void test1()
17{
18 try
19 {
20 throw nullptr;
21 assert(false);
22 }
23 catch (A*)
24 {
25 }
26 catch (const A*)
27 {
28 assert(false);
29 }
30}
31
32
33void test2()
34{
35 try
36 {
37 throw nullptr;
38 assert(false);
39 }
40 catch (const A*)
41 {
42 }
43 catch (A*)
44 {
45 assert(false);
46 }
47}
48
49void test3()
50{
51 try
52 {
53 throw nullptr;
54 assert(false);
55 }
Marshall Clow350bda62013-12-04 05:39:55 +000056 catch (const A* const)
Marshall Clowa27b0cd2012-02-01 22:27:24 +000057 {
58 }
59 catch (A*)
60 {
61 assert(false);
62 }
63}
64
65void test4()
66{
67 try
68 {
69 throw nullptr;
70 assert(false);
71 }
72 catch (A*)
73 {
74 }
Marshall Clow350bda62013-12-04 05:39:55 +000075 catch (const A* const)
Marshall Clowa27b0cd2012-02-01 22:27:24 +000076 {
77 assert(false);
78 }
79}
80
81void test5()
82{
83 try
84 {
85 throw nullptr;
86 assert(false);
87 }
88 catch (A const*)
89 {
90 }
91 catch (A*)
92 {
93 assert(false);
94 }
95}
96
97void test6()
98{
99 try
100 {
101 throw nullptr;
102 assert(false);
103 }
104 catch (A*)
105 {
106 }
107 catch (A const*)
108 {
109 assert(false);
110 }
111}
112
113
114#else
115
116void test1() {}
117void test2() {}
118void test3() {}
119void test4() {}
120void test5() {}
121void test6() {}
122
123#endif
124
125int main()
126{
127 test1();
128 test2();
129 test3();
130 test4();
131 test5();
132 test6();
133}