// Warn if we try to give an instantiation visibility after it's already
// been instantiated.

// { dg-require-visibility "" }

template <class T> struct A { void f (T); };
template <class T> void A<T>::f (T) { }

A<double> ad;
template struct __attribute ((visibility ("hidden"))) A<double>; // { dg-warning "already defined" }