1*c05d8e5dSAndroid Build Coastguard Worker //===--------------------- catch_const_pointer_nullptr.cpp ----------------===// 2*c05d8e5dSAndroid Build Coastguard Worker // 3*c05d8e5dSAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*c05d8e5dSAndroid Build Coastguard Worker // 5*c05d8e5dSAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open 6*c05d8e5dSAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details. 7*c05d8e5dSAndroid Build Coastguard Worker // 8*c05d8e5dSAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*c05d8e5dSAndroid Build Coastguard Worker 10*c05d8e5dSAndroid Build Coastguard Worker // UNSUPPORTED: libcxxabi-no-exceptions 11*c05d8e5dSAndroid Build Coastguard Worker 12*c05d8e5dSAndroid Build Coastguard Worker #include <cassert> 13*c05d8e5dSAndroid Build Coastguard Worker 14*c05d8e5dSAndroid Build Coastguard Worker // Clang emits warnings about exceptions of type 'Child' being caught by 15*c05d8e5dSAndroid Build Coastguard Worker // an earlier handler of type 'Base'. Congrats clang, you've just 16*c05d8e5dSAndroid Build Coastguard Worker // diagnosed the behavior under test. 17*c05d8e5dSAndroid Build Coastguard Worker #if defined(__clang__) 18*c05d8e5dSAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wexceptions" 19*c05d8e5dSAndroid Build Coastguard Worker #endif 20*c05d8e5dSAndroid Build Coastguard Worker 21*c05d8e5dSAndroid Build Coastguard Worker #if __has_feature(cxx_nullptr) 22*c05d8e5dSAndroid Build Coastguard Worker 23*c05d8e5dSAndroid Build Coastguard Worker struct A {}; 24*c05d8e5dSAndroid Build Coastguard Worker test1()25*c05d8e5dSAndroid Build Coastguard Workervoid test1() 26*c05d8e5dSAndroid Build Coastguard Worker { 27*c05d8e5dSAndroid Build Coastguard Worker try 28*c05d8e5dSAndroid Build Coastguard Worker { 29*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 30*c05d8e5dSAndroid Build Coastguard Worker assert(false); 31*c05d8e5dSAndroid Build Coastguard Worker } 32*c05d8e5dSAndroid Build Coastguard Worker catch (A* p) 33*c05d8e5dSAndroid Build Coastguard Worker { 34*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 35*c05d8e5dSAndroid Build Coastguard Worker } 36*c05d8e5dSAndroid Build Coastguard Worker catch (const A*) 37*c05d8e5dSAndroid Build Coastguard Worker { 38*c05d8e5dSAndroid Build Coastguard Worker assert(false); 39*c05d8e5dSAndroid Build Coastguard Worker } 40*c05d8e5dSAndroid Build Coastguard Worker } 41*c05d8e5dSAndroid Build Coastguard Worker 42*c05d8e5dSAndroid Build Coastguard Worker test2()43*c05d8e5dSAndroid Build Coastguard Workervoid test2() 44*c05d8e5dSAndroid Build Coastguard Worker { 45*c05d8e5dSAndroid Build Coastguard Worker try 46*c05d8e5dSAndroid Build Coastguard Worker { 47*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 48*c05d8e5dSAndroid Build Coastguard Worker assert(false); 49*c05d8e5dSAndroid Build Coastguard Worker } 50*c05d8e5dSAndroid Build Coastguard Worker catch (const A* p) 51*c05d8e5dSAndroid Build Coastguard Worker { 52*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 53*c05d8e5dSAndroid Build Coastguard Worker } 54*c05d8e5dSAndroid Build Coastguard Worker catch (A*) 55*c05d8e5dSAndroid Build Coastguard Worker { 56*c05d8e5dSAndroid Build Coastguard Worker assert(false); 57*c05d8e5dSAndroid Build Coastguard Worker } 58*c05d8e5dSAndroid Build Coastguard Worker } 59*c05d8e5dSAndroid Build Coastguard Worker test3()60*c05d8e5dSAndroid Build Coastguard Workervoid test3() 61*c05d8e5dSAndroid Build Coastguard Worker { 62*c05d8e5dSAndroid Build Coastguard Worker try 63*c05d8e5dSAndroid Build Coastguard Worker { 64*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 65*c05d8e5dSAndroid Build Coastguard Worker assert(false); 66*c05d8e5dSAndroid Build Coastguard Worker } 67*c05d8e5dSAndroid Build Coastguard Worker catch (const A* const p) 68*c05d8e5dSAndroid Build Coastguard Worker { 69*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 70*c05d8e5dSAndroid Build Coastguard Worker } 71*c05d8e5dSAndroid Build Coastguard Worker catch (A*) 72*c05d8e5dSAndroid Build Coastguard Worker { 73*c05d8e5dSAndroid Build Coastguard Worker assert(false); 74*c05d8e5dSAndroid Build Coastguard Worker } 75*c05d8e5dSAndroid Build Coastguard Worker } 76*c05d8e5dSAndroid Build Coastguard Worker test4()77*c05d8e5dSAndroid Build Coastguard Workervoid test4() 78*c05d8e5dSAndroid Build Coastguard Worker { 79*c05d8e5dSAndroid Build Coastguard Worker try 80*c05d8e5dSAndroid Build Coastguard Worker { 81*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 82*c05d8e5dSAndroid Build Coastguard Worker assert(false); 83*c05d8e5dSAndroid Build Coastguard Worker } 84*c05d8e5dSAndroid Build Coastguard Worker catch (A* p) 85*c05d8e5dSAndroid Build Coastguard Worker { 86*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 87*c05d8e5dSAndroid Build Coastguard Worker } 88*c05d8e5dSAndroid Build Coastguard Worker catch (const A* const) 89*c05d8e5dSAndroid Build Coastguard Worker { 90*c05d8e5dSAndroid Build Coastguard Worker assert(false); 91*c05d8e5dSAndroid Build Coastguard Worker } 92*c05d8e5dSAndroid Build Coastguard Worker } 93*c05d8e5dSAndroid Build Coastguard Worker test5()94*c05d8e5dSAndroid Build Coastguard Workervoid test5() 95*c05d8e5dSAndroid Build Coastguard Worker { 96*c05d8e5dSAndroid Build Coastguard Worker try 97*c05d8e5dSAndroid Build Coastguard Worker { 98*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 99*c05d8e5dSAndroid Build Coastguard Worker assert(false); 100*c05d8e5dSAndroid Build Coastguard Worker } 101*c05d8e5dSAndroid Build Coastguard Worker catch (A const* p) 102*c05d8e5dSAndroid Build Coastguard Worker { 103*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 104*c05d8e5dSAndroid Build Coastguard Worker } 105*c05d8e5dSAndroid Build Coastguard Worker catch (A*) 106*c05d8e5dSAndroid Build Coastguard Worker { 107*c05d8e5dSAndroid Build Coastguard Worker assert(false); 108*c05d8e5dSAndroid Build Coastguard Worker } 109*c05d8e5dSAndroid Build Coastguard Worker } 110*c05d8e5dSAndroid Build Coastguard Worker test6()111*c05d8e5dSAndroid Build Coastguard Workervoid test6() 112*c05d8e5dSAndroid Build Coastguard Worker { 113*c05d8e5dSAndroid Build Coastguard Worker try 114*c05d8e5dSAndroid Build Coastguard Worker { 115*c05d8e5dSAndroid Build Coastguard Worker throw nullptr; 116*c05d8e5dSAndroid Build Coastguard Worker assert(false); 117*c05d8e5dSAndroid Build Coastguard Worker } 118*c05d8e5dSAndroid Build Coastguard Worker catch (A* p) 119*c05d8e5dSAndroid Build Coastguard Worker { 120*c05d8e5dSAndroid Build Coastguard Worker assert(!p); 121*c05d8e5dSAndroid Build Coastguard Worker } 122*c05d8e5dSAndroid Build Coastguard Worker catch (A const*) 123*c05d8e5dSAndroid Build Coastguard Worker { 124*c05d8e5dSAndroid Build Coastguard Worker assert(false); 125*c05d8e5dSAndroid Build Coastguard Worker } 126*c05d8e5dSAndroid Build Coastguard Worker } 127*c05d8e5dSAndroid Build Coastguard Worker 128*c05d8e5dSAndroid Build Coastguard Worker 129*c05d8e5dSAndroid Build Coastguard Worker #else 130*c05d8e5dSAndroid Build Coastguard Worker test1()131*c05d8e5dSAndroid Build Coastguard Workervoid test1() {} test2()132*c05d8e5dSAndroid Build Coastguard Workervoid test2() {} test3()133*c05d8e5dSAndroid Build Coastguard Workervoid test3() {} test4()134*c05d8e5dSAndroid Build Coastguard Workervoid test4() {} test5()135*c05d8e5dSAndroid Build Coastguard Workervoid test5() {} test6()136*c05d8e5dSAndroid Build Coastguard Workervoid test6() {} 137*c05d8e5dSAndroid Build Coastguard Worker 138*c05d8e5dSAndroid Build Coastguard Worker #endif 139*c05d8e5dSAndroid Build Coastguard Worker main()140*c05d8e5dSAndroid Build Coastguard Workerint main() 141*c05d8e5dSAndroid Build Coastguard Worker { 142*c05d8e5dSAndroid Build Coastguard Worker test1(); 143*c05d8e5dSAndroid Build Coastguard Worker test2(); 144*c05d8e5dSAndroid Build Coastguard Worker test3(); 145*c05d8e5dSAndroid Build Coastguard Worker test4(); 146*c05d8e5dSAndroid Build Coastguard Worker test5(); 147*c05d8e5dSAndroid Build Coastguard Worker test6(); 148*c05d8e5dSAndroid Build Coastguard Worker } 149