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 5 int f(); 6 7 namespace { 8 // CHECK-1: @_ZN12_GLOBAL__N_11bE = internal global i32 0 9 // CHECK-1: @_ZN12_GLOBAL__N_11cE = internal global i32 0 10 // CHECK-1: @_ZN12_GLOBAL__N_12c2E = internal global i32 0 11 // CHECK-1: @_ZN12_GLOBAL__N_11D1dE = internal global i32 0 12 // CHECK-1: @_ZN12_GLOBAL__N_11aE = internal global i32 0 13 int a = 0; 14 15 int b = f(); 16 17 static int c = f(); 18 19 // Note, we can't use an 'L' mangling for c or c2 (like GCC does) based on 20 // the 'static' specifier, because the variable can be redeclared without it. 21 extern int c2; 22 int g() { return c2; } 23 static int c2 = f(); 24 25 class D { 26 static int d; 27 }; 28 29 int D::d = f(); 30 31 // Check for generation of a VTT with internal linkage 32 // CHECK-1: @_ZTSN12_GLOBAL__N_11X1EE = internal constant 33 struct X { 34 struct EBase { }; 35 struct E : public virtual EBase { virtual ~E() {} }; 36 }; 37 38 // CHECK-1-LABEL: define internal noundef i32 @_ZN12_GLOBAL__N_13fooEv() 39 int foo() { 40 return 32; 41 } 42 43 // CHECK-1-LABEL: define internal noundef i32 @_ZN12_GLOBAL__N_11A3fooEv() 44 namespace A { 45 int foo() { 46 return 45; 47 } 48 } 49 } 50 51 int concrete() { 52 return a + foo() + A::foo(); 53 } 54 55 void test_XE() { throw X::E(); } 56 57 // Miscompile on llvmc plugins. 58 namespace test2 { 59 struct A { 60 template <class T> struct B { 61 static void foo() {} 62 }; 63 }; 64 namespace { 65 struct C; 66 } 67 68 // CHECK-2-LABEL: define{{.*}} void @_ZN5test24testEv() 69 // CHECK-2: call void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv() 70 void test() { 71 A::B<C>::foo(); 72 } 73 74 // CHECK-2-LABEL: define internal void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv() 75 } 76 77 namespace { 78 79 int bar() { 80 extern int a; 81 return a; 82 } 83 84 } // namespace 85