1*e434b34fSJonathan Roelofs //===----------------- catch_member_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 struct A
15*e434b34fSJonathan Roelofs {
16*e434b34fSJonathan Roelofs     const int i;
17*e434b34fSJonathan Roelofs     int j;
18*e434b34fSJonathan Roelofs };
19*e434b34fSJonathan Roelofs 
20*e434b34fSJonathan Roelofs typedef const int A::*md1;
21*e434b34fSJonathan Roelofs typedef       int A::*md2;
22*e434b34fSJonathan Roelofs 
23*e434b34fSJonathan Roelofs void test1()
24*e434b34fSJonathan Roelofs {
25*e434b34fSJonathan Roelofs     try
26*e434b34fSJonathan Roelofs     {
27*e434b34fSJonathan Roelofs         throw nullptr;
28*e434b34fSJonathan Roelofs         assert(false);
29*e434b34fSJonathan Roelofs     }
30*e434b34fSJonathan Roelofs     catch (md2)
31*e434b34fSJonathan Roelofs     {
32*e434b34fSJonathan Roelofs     }
33*e434b34fSJonathan Roelofs     catch (md1)
34*e434b34fSJonathan Roelofs     {
35*e434b34fSJonathan Roelofs         assert(false);
36*e434b34fSJonathan Roelofs     }
37*e434b34fSJonathan Roelofs }
38*e434b34fSJonathan Roelofs 
39*e434b34fSJonathan Roelofs void test2()
40*e434b34fSJonathan Roelofs {
41*e434b34fSJonathan Roelofs     try
42*e434b34fSJonathan Roelofs     {
43*e434b34fSJonathan Roelofs         throw nullptr;
44*e434b34fSJonathan Roelofs         assert(false);
45*e434b34fSJonathan Roelofs     }
46*e434b34fSJonathan Roelofs     catch (md1)
47*e434b34fSJonathan Roelofs     {
48*e434b34fSJonathan Roelofs     }
49*e434b34fSJonathan Roelofs     catch (md2)
50*e434b34fSJonathan Roelofs     {
51*e434b34fSJonathan Roelofs         assert(false);
52*e434b34fSJonathan Roelofs     }
53*e434b34fSJonathan Roelofs }
54*e434b34fSJonathan Roelofs 
55*e434b34fSJonathan Roelofs #else
56*e434b34fSJonathan Roelofs 
57*e434b34fSJonathan Roelofs void test1()
58*e434b34fSJonathan Roelofs {
59*e434b34fSJonathan Roelofs }
60*e434b34fSJonathan Roelofs 
61*e434b34fSJonathan Roelofs void test2()
62*e434b34fSJonathan Roelofs {
63*e434b34fSJonathan Roelofs }
64*e434b34fSJonathan Roelofs 
65*e434b34fSJonathan Roelofs #endif
66*e434b34fSJonathan Roelofs 
67*e434b34fSJonathan Roelofs int main()
68*e434b34fSJonathan Roelofs {
69*e434b34fSJonathan Roelofs     test1();
70*e434b34fSJonathan Roelofs     test2();
71*e434b34fSJonathan Roelofs }
72