1 // RUN: %clang_cc1 -fno-rtti -fcxx-exceptions -fexceptions %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s 2 3 // CHECK: @_ZTIN5test11AE = linkonce_odr constant 4 // CHECK: @_ZTIN5test11BE = linkonce_odr constant 5 // CHECK: @_ZTIN5test11CE = linkonce_odr constant 6 // CHECK: @_ZTIN5test11DE = linkonce_odr constant 7 // CHECK: @_ZTIPN5test11DE = linkonce_odr constant {{.*}} @_ZTIN5test11DE 8 9 // PR6974: this shouldn't crash 10 namespace test0 { 11 class err {}; 12 f(void)13 void f(void) { 14 try { 15 } catch (err &) { 16 } 17 } 18 } 19 20 namespace test1 { 21 // These classes have key functions defined out-of-line. Under 22 // normal circumstances, we wouldn't generate RTTI for them; under 23 // -fno-rtti, we generate RTTI only when required by EH. But 24 // everything gets hidden visibility because we assume that all 25 // users are also compiled under -fno-rtti and therefore will be 26 // emitting RTTI regardless of key function. 27 class A { virtual void foo(); }; 28 class B { virtual void foo(); }; 29 class C { virtual void foo(); }; 30 class D { virtual void foo(); }; 31 32 void opaque(); 33 test0()34 void test0() { 35 throw A(); 36 } 37 test1()38 void test1() throw(B) { 39 opaque(); 40 } 41 test2()42 void test2() { 43 try { 44 opaque(); 45 } catch (C&) {} 46 } 47 test3(D * ptr)48 void test3(D *ptr) { 49 throw ptr; 50 }; 51 } 52