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// UNSUPPORTED: no-exceptions
10
11// Clang and GCC emit warnings about exceptions of type 'Child' being caught by
12// an earlier handler of type 'Base'.
13// ADDITIONAL_COMPILE_FLAGS: -Wno-exceptions
14
15#include <cassert>
16
17struct A {};
18
19void test1()
20{
21 try
22 {
23 throw nullptr;
24 assert(false);
25 }
26 catch (A* p)
27 {
28 assert(!p);
29 }
30 catch (const A*)
31 {
32 assert(false);
33 }
34}
35
36
37void test2()
38{
39 try
40 {
41 throw nullptr;
42 assert(false);
43 }
44 catch (const A* p)
45 {
46 assert(!p);
47 }
48 catch (A*)
49 {
50 assert(false);
51 }
52}
53
54void test3()
55{
56 try
57 {
58 throw nullptr;
59 assert(false);
60 }
61 catch (const A* const p)
62 {
63 assert(!p);
64 }
65 catch (A*)
66 {
67 assert(false);
68 }
69}
70
71void test4()
72{
73 try
74 {
75 throw nullptr;
76 assert(false);
77 }
78 catch (A* p)
79 {
80 assert(!p);
81 }
82 catch (const A* const)
83 {
84 assert(false);
85 }
86}
87
88void test5()
89{
90 try
91 {
92 throw nullptr;
93 assert(false);
94 }
95 catch (A const* p)
96 {
97 assert(!p);
98 }
99 catch (A*)
100 {
101 assert(false);
102 }
103}
104
105void test6()
106{
107 try
108 {
109 throw nullptr;
110 assert(false);
111 }
112 catch (A* p)
113 {
114 assert(!p);
115 }
116 catch (A const*)
117 {
118 assert(false);
119 }
120}
121
122int main(int, char**) {
123 test1();
124 test2();
125 test3();
126 test4();
127 test5();
128 test6();
129
130 return 0;
131}
132

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of libcxxabi/test/catch_const_pointer_nullptr.pass.cpp