1*67e74705SXin Li // Header for PCH test cxx-friends.cpp 2*67e74705SXin Li 3*67e74705SXin Li class A { 4*67e74705SXin Li int x; 5*67e74705SXin Li friend class F; 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li namespace PR12585 { 9*67e74705SXin Li struct future_base { 10*67e74705SXin Li template<typename> class setter; 11*67e74705SXin Li }; 12*67e74705SXin Li template<typename> class promise { 13*67e74705SXin Li // We used to inject this into future_base with no access specifier, 14*67e74705SXin Li // then crash during AST writing. 15*67e74705SXin Li template<typename> friend class future_base::setter; 16*67e74705SXin Li int k; 17*67e74705SXin Li }; 18*67e74705SXin Li } 19*67e74705SXin Li 20*67e74705SXin Li namespace Lazy { 21*67e74705SXin Li struct S { 22*67e74705SXin Li friend void doNotDeserialize(); 23*67e74705SXin Li }; 24*67e74705SXin Li } 25*67e74705SXin Li 26*67e74705SXin Li // Reduced testcase from libc++'s <valarray>. Used to crash with modules 27*67e74705SXin Li // enabled. 28*67e74705SXin Li namespace std { 29*67e74705SXin Li 30*67e74705SXin Li template <class T> struct valarray; 31*67e74705SXin Li 32*67e74705SXin Li template <class T> struct valarray { 33*67e74705SXin Li valarray(); 34*67e74705SXin Li template <class U> friend struct valarray; 35*67e74705SXin Li template <class U> friend U *begin(valarray<U> &v); 36*67e74705SXin Li }; 37*67e74705SXin Li 38*67e74705SXin Li struct gslice { 39*67e74705SXin Li valarray<int> size; gslicegslice40*67e74705SXin Li gslice() {} 41*67e74705SXin Li }; 42*67e74705SXin Li 43*67e74705SXin Li } 44