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