1e434b34fSJonathan Roelofs //===--------------------- catch_const_pointer_nullptr.cpp ----------------===// 2e434b34fSJonathan Roelofs // 3e434b34fSJonathan Roelofs // The LLVM Compiler Infrastructure 4e434b34fSJonathan Roelofs // 5e434b34fSJonathan Roelofs // This file is dual licensed under the MIT and the University of Illinois Open 6e434b34fSJonathan Roelofs // Source Licenses. See LICENSE.TXT for details. 7e434b34fSJonathan Roelofs // 8e434b34fSJonathan Roelofs //===----------------------------------------------------------------------===// 9e434b34fSJonathan Roelofs 10*57e446daSAsiri Rathnayake // UNSUPPORTED: libcxxabi-no-exceptions 11*57e446daSAsiri Rathnayake 12e434b34fSJonathan Roelofs #include <cassert> 13e434b34fSJonathan Roelofs 14e434b34fSJonathan Roelofs #if __has_feature(cxx_nullptr) 15e434b34fSJonathan Roelofs 16e434b34fSJonathan Roelofs struct A {}; 17e434b34fSJonathan Roelofs 18e434b34fSJonathan Roelofs void test1() 19e434b34fSJonathan Roelofs { 20e434b34fSJonathan Roelofs try 21e434b34fSJonathan Roelofs { 22e434b34fSJonathan Roelofs throw nullptr; 23e434b34fSJonathan Roelofs assert(false); 24e434b34fSJonathan Roelofs } 25e434b34fSJonathan Roelofs catch (A*) 26e434b34fSJonathan Roelofs { 27e434b34fSJonathan Roelofs } 28e434b34fSJonathan Roelofs catch (const A*) 29e434b34fSJonathan Roelofs { 30e434b34fSJonathan Roelofs assert(false); 31e434b34fSJonathan Roelofs } 32e434b34fSJonathan Roelofs } 33e434b34fSJonathan Roelofs 34e434b34fSJonathan Roelofs 35e434b34fSJonathan Roelofs void test2() 36e434b34fSJonathan Roelofs { 37e434b34fSJonathan Roelofs try 38e434b34fSJonathan Roelofs { 39e434b34fSJonathan Roelofs throw nullptr; 40e434b34fSJonathan Roelofs assert(false); 41e434b34fSJonathan Roelofs } 42e434b34fSJonathan Roelofs catch (const A*) 43e434b34fSJonathan Roelofs { 44e434b34fSJonathan Roelofs } 45e434b34fSJonathan Roelofs catch (A*) 46e434b34fSJonathan Roelofs { 47e434b34fSJonathan Roelofs assert(false); 48e434b34fSJonathan Roelofs } 49e434b34fSJonathan Roelofs } 50e434b34fSJonathan Roelofs 51e434b34fSJonathan Roelofs void test3() 52e434b34fSJonathan Roelofs { 53e434b34fSJonathan Roelofs try 54e434b34fSJonathan Roelofs { 55e434b34fSJonathan Roelofs throw nullptr; 56e434b34fSJonathan Roelofs assert(false); 57e434b34fSJonathan Roelofs } 58e434b34fSJonathan Roelofs catch (const A* const) 59e434b34fSJonathan Roelofs { 60e434b34fSJonathan Roelofs } 61e434b34fSJonathan Roelofs catch (A*) 62e434b34fSJonathan Roelofs { 63e434b34fSJonathan Roelofs assert(false); 64e434b34fSJonathan Roelofs } 65e434b34fSJonathan Roelofs } 66e434b34fSJonathan Roelofs 67e434b34fSJonathan Roelofs void test4() 68e434b34fSJonathan Roelofs { 69e434b34fSJonathan Roelofs try 70e434b34fSJonathan Roelofs { 71e434b34fSJonathan Roelofs throw nullptr; 72e434b34fSJonathan Roelofs assert(false); 73e434b34fSJonathan Roelofs } 74e434b34fSJonathan Roelofs catch (A*) 75e434b34fSJonathan Roelofs { 76e434b34fSJonathan Roelofs } 77e434b34fSJonathan Roelofs catch (const A* const) 78e434b34fSJonathan Roelofs { 79e434b34fSJonathan Roelofs assert(false); 80e434b34fSJonathan Roelofs } 81e434b34fSJonathan Roelofs } 82e434b34fSJonathan Roelofs 83e434b34fSJonathan Roelofs void test5() 84e434b34fSJonathan Roelofs { 85e434b34fSJonathan Roelofs try 86e434b34fSJonathan Roelofs { 87e434b34fSJonathan Roelofs throw nullptr; 88e434b34fSJonathan Roelofs assert(false); 89e434b34fSJonathan Roelofs } 90e434b34fSJonathan Roelofs catch (A const*) 91e434b34fSJonathan Roelofs { 92e434b34fSJonathan Roelofs } 93e434b34fSJonathan Roelofs catch (A*) 94e434b34fSJonathan Roelofs { 95e434b34fSJonathan Roelofs assert(false); 96e434b34fSJonathan Roelofs } 97e434b34fSJonathan Roelofs } 98e434b34fSJonathan Roelofs 99e434b34fSJonathan Roelofs void test6() 100e434b34fSJonathan Roelofs { 101e434b34fSJonathan Roelofs try 102e434b34fSJonathan Roelofs { 103e434b34fSJonathan Roelofs throw nullptr; 104e434b34fSJonathan Roelofs assert(false); 105e434b34fSJonathan Roelofs } 106e434b34fSJonathan Roelofs catch (A*) 107e434b34fSJonathan Roelofs { 108e434b34fSJonathan Roelofs } 109e434b34fSJonathan Roelofs catch (A const*) 110e434b34fSJonathan Roelofs { 111e434b34fSJonathan Roelofs assert(false); 112e434b34fSJonathan Roelofs } 113e434b34fSJonathan Roelofs } 114e434b34fSJonathan Roelofs 115e434b34fSJonathan Roelofs 116e434b34fSJonathan Roelofs #else 117e434b34fSJonathan Roelofs 118e434b34fSJonathan Roelofs void test1() {} 119e434b34fSJonathan Roelofs void test2() {} 120e434b34fSJonathan Roelofs void test3() {} 121e434b34fSJonathan Roelofs void test4() {} 122e434b34fSJonathan Roelofs void test5() {} 123e434b34fSJonathan Roelofs void test6() {} 124e434b34fSJonathan Roelofs 125e434b34fSJonathan Roelofs #endif 126e434b34fSJonathan Roelofs 127e434b34fSJonathan Roelofs int main() 128e434b34fSJonathan Roelofs { 129e434b34fSJonathan Roelofs test1(); 130e434b34fSJonathan Roelofs test2(); 131e434b34fSJonathan Roelofs test3(); 132e434b34fSJonathan Roelofs test4(); 133e434b34fSJonathan Roelofs test5(); 134e434b34fSJonathan Roelofs test6(); 135e434b34fSJonathan Roelofs } 136