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: c++03
10// UNSUPPORTED: no-exceptions
11
12#include <cassert>
13#include <cstdlib>
14
15struct A {};
16
17void test1()
18{
19 try
20 {
21 throw nullptr;
22 assert(false);
23 }
24 catch (int* p)
25 {
26 assert(!p);
27 }
28 catch (long*)
29 {
30 assert(false);
31 }
32}
33
34void test2()
35{
36 try
37 {
38 throw nullptr;
39 assert(false);
40 }
41 catch (A* p)
42 {
43 assert(!p);
44 }
45 catch (int*)
46 {
47 assert(false);
48 }
49}
50
51template <class Catch>
52void catch_nullptr_test() {
53 try {
54 throw nullptr;
55 assert(false);
56 } catch (Catch c) {
57 assert(!c);
58 } catch (...) {
59 assert(false);
60 }
61}
62
63
64int main(int, char**)
65{
66 // catch naked nullptrs
67 test1();
68 test2();
69
70 catch_nullptr_test<int*>();
71 catch_nullptr_test<int**>();
72 catch_nullptr_test<int A::*>();
73 catch_nullptr_test<const int A::*>();
74 catch_nullptr_test<int A::**>();
75
76 return 0;
77}
78

Provided by KDAB

Privacy Policy
Update your C++ knowledge – Modern C++11/14/17 Training
Find out more

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