|  | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
|  |  | 
|  | template <typename T> class Foo { | 
|  | struct Base : T {}; | 
|  |  | 
|  | // Test that this code no longer causes a crash in Sema. | 
|  | struct Derived : Base, T {}; | 
|  | }; | 
|  |  | 
|  |  | 
|  | template <typename T> struct Foo2 { | 
|  | struct Base1; // expected-note{{member is declared here}} | 
|  | struct Base2; // expected-note{{member is declared here}} | 
|  | // Should not crash on an incomplete-type and dependent base specifier. | 
|  | struct Derived : Base1, Base2 {}; // expected-error {{implicit instantiation of undefined member 'Foo2<int>::Base1'}} \ | 
|  | expected-error {{implicit instantiation of undefined member 'Foo2<int>::Base2'}} | 
|  | }; | 
|  |  | 
|  | Foo2<int>::Derived a; // expected-note{{in instantiation of member class}} |