Douglas Gregor | 7cf84d6 | 2010-06-15 17:05:35 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 -fvisibility-inlines-hidden -emit-llvm -o - %s | FileCheck %s |
| 2 | struct X0 { |
| 3 | void __attribute__((visibility("default"))) f1() { } |
| 4 | void f2() { } |
| 5 | void f3(); |
| 6 | static void f5() { } |
| 7 | virtual void f6() { } |
| 8 | }; |
| 9 | |
| 10 | inline void X0::f3() { } |
| 11 | |
| 12 | template<typename T> |
| 13 | struct 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 | |
| 22 | template<typename T> |
| 23 | inline void X1<T>::f3() { } |
| 24 | |
| 25 | template<> |
| 26 | inline void X1<int>::f4() { } |
| 27 | |
| 28 | struct __attribute__((visibility("default"))) X2 { |
| 29 | void f2() { } |
| 30 | }; |
| 31 | |
| 32 | void 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 | } |