1 // Test this without pch.
2 // RUN: %clang_cc1 -fsyntax-only -emit-llvm-only %s
3 
4 // Test with pch.
5 // RUN: touch %t.empty.cpp
6 // RUN: %clang_cc1 -emit-pch -o %t %s
7 // RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp
8 
9 // RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s
10 // RUN: %clang_cc1 -include-pch %t -emit-llvm-only %t.empty.cpp
11 
12 // rdar://10830559
13 
14 //#pragma ms_struct on
15 
16 template< typename T >
17 class Templated
18 {
19 public:
20    struct s;
21 };
22 
23 
24 class Foo
25 {
26 private:
27 
28    class Bar
29    {
30    private:
31       class BarTypes { public: virtual void Func(); };
32       class BarImpl {};
33       friend class Foo;
34    };
35 
36 
37    friend class Templated< Bar::BarImpl >::s;
38 };
39