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_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 { };
~E__anon8a506f120111::X::E28 struct E : public virtual EBase { virtual ~E() {} };
29 };
30
31 // CHECK-1-LABEL: define internal i32 @_ZN12_GLOBAL__N_13fooEv()
foo()32 int foo() {
33 return 32;
34 }
35
36 // CHECK-1-LABEL: define internal i32 @_ZN12_GLOBAL__N_11A3fooEv()
37 namespace A {
foo()38 int foo() {
39 return 45;
40 }
41 }
42 }
43
concrete()44 int concrete() {
45 return a + foo() + A::foo();
46 }
47
test_XE()48 void test_XE() { throw X::E(); }
49
50 // Miscompile on llvmc plugins.
51 namespace test2 {
52 struct A {
53 template <class T> struct B {
footest2::A::B54 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()
test()63 void test() {
64 A::B<C>::foo();
65 }
66
67 // CHECK-2-LABEL: define internal void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv()
68 }
69
70 namespace {
71
bar()72 int bar() {
73 extern int a;
74 return a;
75 }
76
77 } // namespace
78