1*e434b34fSJonathan Roelofs //===--------------------- catch_pointer_nullptr.cpp ----------------------===//
2*e434b34fSJonathan Roelofs //
3*e434b34fSJonathan Roelofs //                     The LLVM Compiler Infrastructure
4*e434b34fSJonathan Roelofs //
5*e434b34fSJonathan Roelofs // This file is dual licensed under the MIT and the University of Illinois Open
6*e434b34fSJonathan Roelofs // Source Licenses. See LICENSE.TXT for details.
7*e434b34fSJonathan Roelofs //
8*e434b34fSJonathan Roelofs //===----------------------------------------------------------------------===//
9*e434b34fSJonathan Roelofs 
10*e434b34fSJonathan Roelofs #include <cassert>
11*e434b34fSJonathan Roelofs 
12*e434b34fSJonathan Roelofs #if __has_feature(cxx_nullptr)
13*e434b34fSJonathan Roelofs 
14*e434b34fSJonathan Roelofs void test1()
15*e434b34fSJonathan Roelofs {
16*e434b34fSJonathan Roelofs     try
17*e434b34fSJonathan Roelofs     {
18*e434b34fSJonathan Roelofs         throw nullptr;
19*e434b34fSJonathan Roelofs         assert(false);
20*e434b34fSJonathan Roelofs     }
21*e434b34fSJonathan Roelofs     catch (int*)
22*e434b34fSJonathan Roelofs     {
23*e434b34fSJonathan Roelofs     }
24*e434b34fSJonathan Roelofs     catch (long*)
25*e434b34fSJonathan Roelofs     {
26*e434b34fSJonathan Roelofs         assert(false);
27*e434b34fSJonathan Roelofs     }
28*e434b34fSJonathan Roelofs }
29*e434b34fSJonathan Roelofs 
30*e434b34fSJonathan Roelofs struct A {};
31*e434b34fSJonathan Roelofs 
32*e434b34fSJonathan Roelofs void test2()
33*e434b34fSJonathan Roelofs {
34*e434b34fSJonathan Roelofs     try
35*e434b34fSJonathan Roelofs     {
36*e434b34fSJonathan Roelofs         throw nullptr;
37*e434b34fSJonathan Roelofs         assert(false);
38*e434b34fSJonathan Roelofs     }
39*e434b34fSJonathan Roelofs     catch (A*)
40*e434b34fSJonathan Roelofs     {
41*e434b34fSJonathan Roelofs     }
42*e434b34fSJonathan Roelofs     catch (int*)
43*e434b34fSJonathan Roelofs     {
44*e434b34fSJonathan Roelofs         assert(false);
45*e434b34fSJonathan Roelofs     }
46*e434b34fSJonathan Roelofs }
47*e434b34fSJonathan Roelofs 
48*e434b34fSJonathan Roelofs #else
49*e434b34fSJonathan Roelofs 
50*e434b34fSJonathan Roelofs void test1()
51*e434b34fSJonathan Roelofs {
52*e434b34fSJonathan Roelofs }
53*e434b34fSJonathan Roelofs 
54*e434b34fSJonathan Roelofs void test2()
55*e434b34fSJonathan Roelofs {
56*e434b34fSJonathan Roelofs }
57*e434b34fSJonathan Roelofs 
58*e434b34fSJonathan Roelofs #endif
59*e434b34fSJonathan Roelofs 
60*e434b34fSJonathan Roelofs int main()
61*e434b34fSJonathan Roelofs {
62*e434b34fSJonathan Roelofs     test1();
63*e434b34fSJonathan Roelofs     test2();
64*e434b34fSJonathan Roelofs }
65