132 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: no-exceptions10 11// Clang and GCC emit warnings about exceptions of type 'Child' being caught by12// an earlier handler of type 'Base'.13// ADDITIONAL_COMPILE_FLAGS: -Wno-exceptions14 15#include <cassert>16 17struct A {};18 19void test1()20{21 try22 {23 throw nullptr;24 assert(false);25 }26 catch (A* p)27 {28 assert(!p);29 }30 catch (const A*)31 {32 assert(false);33 }34}35 36 37void test2()38{39 try40 {41 throw nullptr;42 assert(false);43 }44 catch (const A* p)45 {46 assert(!p);47 }48 catch (A*)49 {50 assert(false);51 }52}53 54void test3()55{56 try57 {58 throw nullptr;59 assert(false);60 }61 catch (const A* const p)62 {63 assert(!p);64 }65 catch (A*)66 {67 assert(false);68 }69}70 71void test4()72{73 try74 {75 throw nullptr;76 assert(false);77 }78 catch (A* p)79 {80 assert(!p);81 }82 catch (const A* const)83 {84 assert(false);85 }86}87 88void test5()89{90 try91 {92 throw nullptr;93 assert(false);94 }95 catch (A const* p)96 {97 assert(!p);98 }99 catch (A*)100 {101 assert(false);102 }103}104 105void test6()106{107 try108 {109 throw nullptr;110 assert(false);111 }112 catch (A* p)113 {114 assert(!p);115 }116 catch (A const*)117 {118 assert(false);119 }120}121 122int main(int, char**) {123 test1();124 test2();125 test3();126 test4();127 test5();128 test6();129 130 return 0;131}132