16764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis// Header for PCH test cxx-friends.cpp
26764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis
36764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidisclass A {
46764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis  int x;
56764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis  friend class F;
66764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis};
76e21b16ab226959341b85e16060fd81f71cee628Richard Smith
86e21b16ab226959341b85e16060fd81f71cee628Richard Smithnamespace PR12585 {
96e21b16ab226959341b85e16060fd81f71cee628Richard Smith  struct future_base {
106e21b16ab226959341b85e16060fd81f71cee628Richard Smith    template<typename> class setter;
116e21b16ab226959341b85e16060fd81f71cee628Richard Smith  };
126e21b16ab226959341b85e16060fd81f71cee628Richard Smith  template<typename> class promise {
136e21b16ab226959341b85e16060fd81f71cee628Richard Smith    // We used to inject this into future_base with no access specifier,
146e21b16ab226959341b85e16060fd81f71cee628Richard Smith    // then crash during AST writing.
156e21b16ab226959341b85e16060fd81f71cee628Richard Smith    template<typename> friend class future_base::setter;
166e21b16ab226959341b85e16060fd81f71cee628Richard Smith    int k;
176e21b16ab226959341b85e16060fd81f71cee628Richard Smith  };
186e21b16ab226959341b85e16060fd81f71cee628Richard Smith}
194fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
204fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smithnamespace Lazy {
214fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  struct S {
224fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith    friend void doNotDeserialize();
234fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  };
244fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith}
254fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
264fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// Reduced testcase from libc++'s <valarray>. Used to crash with modules
274fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// enabled.
284fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smithnamespace std {
294fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
304fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smithtemplate <class T> struct valarray;
314fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
324fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smithtemplate <class T> struct valarray {
334fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  valarray();
344fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  template <class U> friend struct valarray;
354fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  template <class U> friend U *begin(valarray<U> &v);
364fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith};
374fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
384fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smithstruct gslice {
394fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  valarray<int> size;
404fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith  gslice() {}
414fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith};
424fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
434fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith}
44