Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
      2 
      3 // CHECK: @_ZZ1hvE1i = internal global i32 0, align 4
      4 
      5 // CHECK: @_ZZN5test1L6getvarEiE3var = internal constant [4 x i32] [i32 1, i32 0, i32 2, i32 4], align 16
      6 // CHECK: @_ZZ2h2vE1i = linkonce_odr global i32 0
      7 // CHECK: @_ZGVZ2h2vE1i = linkonce_odr global i64 0
      8 
      9 struct A {
     10   A();
     11   ~A();
     12 };
     13 
     14 void f() {
     15   // CHECK: load atomic i8* bitcast (i64* @_ZGVZ1fvE1a to i8*) acquire, align 1
     16   // CHECK: call i32 @__cxa_guard_acquire
     17   // CHECK: call void @_ZN1AC1Ev
     18   // CHECK: call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.A*)* @_ZN1AD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.A* @_ZZ1fvE1a, i32 0, i32 0), i8* bitcast (i8** @__dso_handle to i8*))
     19   // CHECK: call void @__cxa_guard_release
     20   static A a;
     21 }
     22 
     23 void g() {
     24   // CHECK: call noalias i8* @_Znwm(i64 1)
     25   // CHECK: call void @_ZN1AC1Ev(
     26   static A& a = *new A;
     27 }
     28 
     29 int a();
     30 void h() {
     31   static const int i = a();
     32 }
     33 
     34 inline void h2() {
     35   static int i = a();
     36 }
     37 
     38 void h3() {
     39   h2();
     40 }
     41 
     42 // PR6980: this shouldn't crash
     43 namespace test0 {
     44   struct A { A(); };
     45   __attribute__((noreturn)) int throw_exception();
     46 
     47   void test() {
     48     throw_exception();
     49     static A r;
     50   }
     51 }
     52 
     53 namespace test1 {
     54   // CHECK: define internal i32 @_ZN5test1L6getvarEi(
     55   static inline int getvar(int index) {
     56     static const int var[] = { 1, 0, 2, 4 };
     57     return var[index];
     58   }
     59 
     60   void test() { (void) getvar(2); }
     61 }
     62