blob: fb3470ca9bee581841647cc9a1be36ee60b03e53 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
John McCall9aeed322009-10-01 00:25:31 +00002
Anders Carlssond0c47922010-01-26 06:15:16 +00003int f();
4
John McCall9aeed322009-10-01 00:25:31 +00005namespace {
Anders Carlssond0c47922010-01-26 06:15:16 +00006 // CHECK: @_ZN12_GLOBAL__N_11bE = internal global i32 0
7 // CHECK: @_ZN12_GLOBAL__N_1L1cE = internal global i32 0
8 // CHECK: @_ZN12_GLOBAL__N_11D1dE = internal global i32 0
John McCall9aeed322009-10-01 00:25:31 +00009 // CHECK: @_ZN12_GLOBAL__N_11aE = internal global i32 0
10 int a = 0;
11
Anders Carlssond0c47922010-01-26 06:15:16 +000012 int b = f();
13
14 static int c = f();
15
16 class D {
17 static int d;
18 };
19
20 int D::d = f();
21
Douglas Gregorf4aac112010-05-06 22:18:21 +000022 // Check for generation of a VTT with internal linkage
23 // CHECK: @_ZTSN12_GLOBAL__N_11X1EE = internal constant
24 struct X {
25 struct EBase { };
26 struct E : public virtual EBase { virtual ~E() {} };
27 };
28
John McCall9aeed322009-10-01 00:25:31 +000029 // CHECK: define internal i32 @_ZN12_GLOBAL__N_13fooEv()
30 int foo() {
31 return 32;
32 }
33
34 // CHECK: define internal i32 @_ZN12_GLOBAL__N_11A3fooEv()
35 namespace A {
36 int foo() {
37 return 45;
38 }
39 }
40}
41
42int concrete() {
43 return a + foo() + A::foo();
44}
Douglas Gregorf4aac112010-05-06 22:18:21 +000045
46void test_XE() { throw X::E(); }