16764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis// Test this without pch.
26764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis// RUN: %clang_cc1 -include %S/cxx-friends.h -fsyntax-only -verify %s
36764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis
46764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis// Test with pch.
56764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis// RUN: %clang_cc1 -x c++-header -emit-pch -o %t %S/cxx-friends.h
64fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s -error-on-deserialized-decl doNotDeserialize
74fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
84fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// Test with modules.
94fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// RUN: %clang_cc1 -x c++-header -emit-pch -o %t %S/cxx-friends.h -fmodules
104fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s -error-on-deserialized-decl doNotDeserialize -fmodules
116764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis
128e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
138e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs
146764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidisclass F {
156764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis  void m() {
166764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis    A* a;
176764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis    a->x = 0;
186764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis  }
196764334dfa73d67cbbb1b1fc8fe00440aad00f2aArgyrios Kyrtzidis};
206e21b16ab226959341b85e16060fd81f71cee628Richard Smith
216e21b16ab226959341b85e16060fd81f71cee628Richard Smithtemplate<typename T> class PR12585::future_base::setter {
226e21b16ab226959341b85e16060fd81f71cee628Richard Smithpublic:
236e21b16ab226959341b85e16060fd81f71cee628Richard Smith  int f() {
246e21b16ab226959341b85e16060fd81f71cee628Richard Smith    return promise<T*>().k;
256e21b16ab226959341b85e16060fd81f71cee628Richard Smith  }
266e21b16ab226959341b85e16060fd81f71cee628Richard Smith};
276e21b16ab226959341b85e16060fd81f71cee628Richard Smithint k = PR12585::future_base::setter<int>().f();
284fc5089e306fe606f2e3e4fa58063ebab35deb62Richard Smith
294fc5089e306fe606f2e3e4fa58063ebab35deb62Richard SmithLazy::S *p;
30