blob: bb1574fe9d5f41539afdfda7cbc253d89342a3d8 [file] [log] [blame]
Douglas Gregor7cf84d62010-06-15 17:05:35 +00001// RUN: %clang_cc1 -fvisibility-inlines-hidden -emit-llvm -o - %s | FileCheck %s
2struct X0 {
3 void __attribute__((visibility("default"))) f1() { }
4 void f2() { }
5 void f3();
6 static void f5() { }
7 virtual void f6() { }
8};
9
10inline void X0::f3() { }
11
12template<typename T>
13struct X1 {
14 void __attribute__((visibility("default"))) f1() { }
15 void f2() { }
16 void f3();
17 void f4();
18 static void f5() { }
19 virtual void f6() { }
20};
21
22template<typename T>
23inline void X1<T>::f3() { }
24
25template<>
26inline void X1<int>::f4() { }
27
28struct __attribute__((visibility("default"))) X2 {
29 void f2() { }
30};
31
32void use(X0 *x0, X1<int> *x1, X2 *x2) {
33 // CHECK: define linkonce_odr void @_ZN2X02f1Ev
34 x0->f1();
35 // CHECK: define linkonce_odr hidden void @_ZN2X02f2Ev
36 x0->f2();
37 // CHECK: define linkonce_odr hidden void @_ZN2X02f3Ev
38 x0->f3();
39 // CHECK: define linkonce_odr hidden void @_ZN2X02f5Ev
40 X0::f5();
41 // CHECK: define linkonce_odr hidden void @_ZN2X02f6Ev
42 x0->X0::f6();
43 // CHECK: define linkonce_odr void @_ZN2X1IiE2f1Ev
44 x1->f1();
45 // CHECK: define linkonce_odr hidden void @_ZN2X1IiE2f2Ev
46 x1->f2();
47 // CHECK: define linkonce_odr hidden void @_ZN2X1IiE2f3Ev
48 x1->f3();
49 // CHECK: define linkonce_odr hidden void @_ZN2X1IiE2f4Ev
50 x1->f4();
51 // CHECK: define linkonce_odr hidden void @_ZN2X1IiE2f5Ev
52 X1<int>::f5();
53 // CHECK: define linkonce_odr hidden void @_ZN2X1IiE2f6Ev
54 x1->X1::f6();
55 // CHECK: define linkonce_odr hidden void @_ZN2X22f2Ev
56 x2->f2();
57}