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