Home | History | Annotate | Download | only in CodeGenCXX
      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 unnamed_addr constant
      4 // CHECK: @_ZTIN5test11BE = linkonce_odr unnamed_addr constant
      5 // CHECK: @_ZTIN5test11CE = linkonce_odr unnamed_addr constant
      6 // CHECK: @_ZTIN5test11DE = linkonce_odr unnamed_addr constant
      7 // CHECK: @_ZTIPN5test11DE = linkonce_odr unnamed_addr constant {{.*}} @_ZTIN5test11DE
      8 
      9 // PR6974: this shouldn't crash
     10 namespace test0 {
     11   class err {};
     12 
     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 
     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