| // PR c++/17470 |
| // Test that we can give visibility to explicit template instantiations |
| |
| // { dg-require-visibility "" } |
| // { dg-final { scan-hidden "_ZN1AIlE1fEl" } } |
| // { dg-final { scan-hidden "_ZN1AIiE1fEi" } } |
| // { dg-final { scan-not-hidden "_ZN1AIcE1fEc" } } |
| // { dg-final { scan-hidden "_Z8identityIdET_S0_" } } |
| // { dg-final { scan-not-hidden "_Z8identityIiET_S0_" } } |
| |
| template <class T> T identity(T t) { return t; } |
| template __attribute__((visibility("hidden"))) double identity(double); |
| template int identity(int); |
| |
| |
| template <class T> struct A { void f (T); }; |
| template <class T> void A<T>::f (T) { } |
| template struct __attribute ((visibility ("hidden"))) A<int>; |
| template<> struct __attribute ((visibility ("hidden"))) A<long> { void f(long); }; |
| // inherits hidden visibility from its class |
| void A<long>::f (long) { } |
| template struct A<char>; |