191d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// Test this without pch.
291d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -emit-llvm-only %s
391d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
491d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// Test with pch.
591d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// RUN: touch %t.empty.cpp
691d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// RUN: %clang_cc1 -emit-pch -o %t %s
791d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp
891d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
991d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis// rdar://10830559
1091d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
11b2969b1e50580344891a98f5b241f8351fe371cfWarren Hunt//#pragma ms_struct on
1291d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
1391d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidistemplate< typename T >
1491d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidisclass Templated
1591d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis{
1691d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidispublic:
1791d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   struct s;
1891d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis};
1991d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
2091d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
2191d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidisclass Foo
2291d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis{
2391d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidisprivate:
2491d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
2591d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   class Bar
2691d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   {
2791d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   private:
2891d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis      class BarTypes { public: virtual void Func(); };
2991d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis      class BarImpl {};
3091d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis      friend class Foo;
3191d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   };
3291d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
3391d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis
3491d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis   friend class Templated< Bar::BarImpl >::s;
3591d521de48f9650a1a87c67f19996c4af5b85f1bArgyrios Kyrtzidis};
36