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