1//===--------------------- catch_const_pointer_nullptr.cpp ----------------===//
2//
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    }
56    catch (const A* const)
57    {
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    }
75    catch (const A* const)
76    {
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}
134