exceptions-no-rtti.cpp revision cbfe50224b19119e759802bd0c1463269dffd09e
1// RUN: %clang_cc1 -fno-rtti -fexceptions %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s 2 3// CHECK: @_ZTIN5test11AE = weak_odr hidden constant 4// CHECK: @_ZTIN5test11BE = weak_odr hidden constant 5// CHECK: @_ZTIN5test11CE = weak_odr hidden constant 6// CHECK: @_ZTIN5test11DE = weak_odr hidden constant 7// CHECK: @_ZTIPN5test11DE = weak_odr hidden constant {{.*}} @_ZTIN5test11DE 8 9// PR6974: this shouldn't crash 10namespace test0 { 11 class err {}; 12 13 void f(void) { 14 try { 15 } catch (err &) { 16 } 17 } 18} 19 20namespace 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 34 void test0() { 35 throw A(); 36 } 37 38 void test1() throw(B) { 39 opaque(); 40 } 41 42 void test2() { 43 try { 44 opaque(); 45 } catch (C&) {} 46 } 47 48 void test3(D *ptr) { 49 throw ptr; 50 }; 51} 52