1// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -triple x86_64-apple-darwin10 -emit-llvm %s -o - > %t 2// RUN: FileCheck %s -check-prefix=CHECK-1 < %t 3// RUN: FileCheck %s -check-prefix=CHECK-2 < %t 4 5int f(); 6 7namespace { 8 // CHECK-1: @_ZN12_GLOBAL__N_11bE = internal global i32 0 9 // CHECK-1: @_ZN12_GLOBAL__N_1L1cE = internal global i32 0 10 // CHECK-1: @_ZN12_GLOBAL__N_11D1dE = internal global i32 0 11 // CHECK-1: @_ZN12_GLOBAL__N_11aE = internal global i32 0 12 int a = 0; 13 14 int b = f(); 15 16 static int c = f(); 17 18 class D { 19 static int d; 20 }; 21 22 int D::d = f(); 23 24 // Check for generation of a VTT with internal linkage 25 // CHECK-1: @_ZTSN12_GLOBAL__N_11X1EE = internal constant 26 struct X { 27 struct EBase { }; 28 struct E : public virtual EBase { virtual ~E() {} }; 29 }; 30 31 // CHECK-1-LABEL: define internal i32 @_ZN12_GLOBAL__N_13fooEv() 32 int foo() { 33 return 32; 34 } 35 36 // CHECK-1-LABEL: define internal i32 @_ZN12_GLOBAL__N_11A3fooEv() 37 namespace A { 38 int foo() { 39 return 45; 40 } 41 } 42} 43 44int concrete() { 45 return a + foo() + A::foo(); 46} 47 48void test_XE() { throw X::E(); } 49 50// Miscompile on llvmc plugins. 51namespace test2 { 52 struct A { 53 template <class T> struct B { 54 static void foo() {} 55 }; 56 }; 57 namespace { 58 struct C; 59 } 60 61 // CHECK-2-LABEL: define void @_ZN5test24testEv() 62 // CHECK-2: call void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv() 63 void test() { 64 A::B<C>::foo(); 65 } 66 67 // CHECK-2-LABEL: define internal void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv() 68} 69 70namespace { 71 72int bar() { 73 extern int a; 74 return a; 75} 76 77} // namespace 78