1*e434b34fSJonathan Roelofs //===--------------------- catch_const_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 void test1() 17*e434b34fSJonathan Roelofs { 18*e434b34fSJonathan Roelofs try 19*e434b34fSJonathan Roelofs { 20*e434b34fSJonathan Roelofs throw nullptr; 21*e434b34fSJonathan Roelofs assert(false); 22*e434b34fSJonathan Roelofs } 23*e434b34fSJonathan Roelofs catch (A*) 24*e434b34fSJonathan Roelofs { 25*e434b34fSJonathan Roelofs } 26*e434b34fSJonathan Roelofs catch (const A*) 27*e434b34fSJonathan Roelofs { 28*e434b34fSJonathan Roelofs assert(false); 29*e434b34fSJonathan Roelofs } 30*e434b34fSJonathan Roelofs } 31*e434b34fSJonathan Roelofs 32*e434b34fSJonathan Roelofs 33*e434b34fSJonathan Roelofs void test2() 34*e434b34fSJonathan Roelofs { 35*e434b34fSJonathan Roelofs try 36*e434b34fSJonathan Roelofs { 37*e434b34fSJonathan Roelofs throw nullptr; 38*e434b34fSJonathan Roelofs assert(false); 39*e434b34fSJonathan Roelofs } 40*e434b34fSJonathan Roelofs catch (const A*) 41*e434b34fSJonathan Roelofs { 42*e434b34fSJonathan Roelofs } 43*e434b34fSJonathan Roelofs catch (A*) 44*e434b34fSJonathan Roelofs { 45*e434b34fSJonathan Roelofs assert(false); 46*e434b34fSJonathan Roelofs } 47*e434b34fSJonathan Roelofs } 48*e434b34fSJonathan Roelofs 49*e434b34fSJonathan Roelofs void test3() 50*e434b34fSJonathan Roelofs { 51*e434b34fSJonathan Roelofs try 52*e434b34fSJonathan Roelofs { 53*e434b34fSJonathan Roelofs throw nullptr; 54*e434b34fSJonathan Roelofs assert(false); 55*e434b34fSJonathan Roelofs } 56*e434b34fSJonathan Roelofs catch (const A* const) 57*e434b34fSJonathan Roelofs { 58*e434b34fSJonathan Roelofs } 59*e434b34fSJonathan Roelofs catch (A*) 60*e434b34fSJonathan Roelofs { 61*e434b34fSJonathan Roelofs assert(false); 62*e434b34fSJonathan Roelofs } 63*e434b34fSJonathan Roelofs } 64*e434b34fSJonathan Roelofs 65*e434b34fSJonathan Roelofs void test4() 66*e434b34fSJonathan Roelofs { 67*e434b34fSJonathan Roelofs try 68*e434b34fSJonathan Roelofs { 69*e434b34fSJonathan Roelofs throw nullptr; 70*e434b34fSJonathan Roelofs assert(false); 71*e434b34fSJonathan Roelofs } 72*e434b34fSJonathan Roelofs catch (A*) 73*e434b34fSJonathan Roelofs { 74*e434b34fSJonathan Roelofs } 75*e434b34fSJonathan Roelofs catch (const A* const) 76*e434b34fSJonathan Roelofs { 77*e434b34fSJonathan Roelofs assert(false); 78*e434b34fSJonathan Roelofs } 79*e434b34fSJonathan Roelofs } 80*e434b34fSJonathan Roelofs 81*e434b34fSJonathan Roelofs void test5() 82*e434b34fSJonathan Roelofs { 83*e434b34fSJonathan Roelofs try 84*e434b34fSJonathan Roelofs { 85*e434b34fSJonathan Roelofs throw nullptr; 86*e434b34fSJonathan Roelofs assert(false); 87*e434b34fSJonathan Roelofs } 88*e434b34fSJonathan Roelofs catch (A const*) 89*e434b34fSJonathan Roelofs { 90*e434b34fSJonathan Roelofs } 91*e434b34fSJonathan Roelofs catch (A*) 92*e434b34fSJonathan Roelofs { 93*e434b34fSJonathan Roelofs assert(false); 94*e434b34fSJonathan Roelofs } 95*e434b34fSJonathan Roelofs } 96*e434b34fSJonathan Roelofs 97*e434b34fSJonathan Roelofs void test6() 98*e434b34fSJonathan Roelofs { 99*e434b34fSJonathan Roelofs try 100*e434b34fSJonathan Roelofs { 101*e434b34fSJonathan Roelofs throw nullptr; 102*e434b34fSJonathan Roelofs assert(false); 103*e434b34fSJonathan Roelofs } 104*e434b34fSJonathan Roelofs catch (A*) 105*e434b34fSJonathan Roelofs { 106*e434b34fSJonathan Roelofs } 107*e434b34fSJonathan Roelofs catch (A const*) 108*e434b34fSJonathan Roelofs { 109*e434b34fSJonathan Roelofs assert(false); 110*e434b34fSJonathan Roelofs } 111*e434b34fSJonathan Roelofs } 112*e434b34fSJonathan Roelofs 113*e434b34fSJonathan Roelofs 114*e434b34fSJonathan Roelofs #else 115*e434b34fSJonathan Roelofs 116*e434b34fSJonathan Roelofs void test1() {} 117*e434b34fSJonathan Roelofs void test2() {} 118*e434b34fSJonathan Roelofs void test3() {} 119*e434b34fSJonathan Roelofs void test4() {} 120*e434b34fSJonathan Roelofs void test5() {} 121*e434b34fSJonathan Roelofs void test6() {} 122*e434b34fSJonathan Roelofs 123*e434b34fSJonathan Roelofs #endif 124*e434b34fSJonathan Roelofs 125*e434b34fSJonathan Roelofs int main() 126*e434b34fSJonathan Roelofs { 127*e434b34fSJonathan Roelofs test1(); 128*e434b34fSJonathan Roelofs test2(); 129*e434b34fSJonathan Roelofs test3(); 130*e434b34fSJonathan Roelofs test4(); 131*e434b34fSJonathan Roelofs test5(); 132*e434b34fSJonathan Roelofs test6(); 133*e434b34fSJonathan Roelofs } 134