1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 3961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct A {}; 4961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 5961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct B : A<X> { 6961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian B() : A<X>() {} 7961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 8961743326fd18776f897bf4461345dba680ef637Fariborz JahanianB<int> x; 9961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 10961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct B1 : A<X> { 11961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian typedef A<X> Base; 12961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian B1() : Base() {} 13961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 14961743326fd18776f897bf4461345dba680ef637Fariborz JahanianB1<int> x1; 15961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 16961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 17961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<typename T> struct Tmpl { }; 18961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 19961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<typename T> struct TmplB { }; 20961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 21961743326fd18776f897bf4461345dba680ef637Fariborz Jahanianstruct TmplC : Tmpl<int> { 22961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplC() : 23961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian Tmpl<int>(), 24961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}} 25961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 26961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 27961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 28961743326fd18776f897bf4461345dba680ef637Fariborz Jahanianstruct TmplD : Tmpl<char>, TmplB<char> { 29961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplD(): 30961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}} 31961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplB<char>() {} 32961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 33961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 343956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregornamespace PR7259 { 353956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Base { 363956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor public: 373956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor Base() {} 383956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 393956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 403956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor template <class ParentClass> 413956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Derived : public ParentClass { 423956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor public: 433956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor Derived() : Base() {} 443956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 453956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 463956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Final : public Derived<Base> { 473956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 483956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 493956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor int 503956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor main (void) 513956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor { 52cb7709c06027448c754dd03e2e521d82d04818bfRichard Smith Final final; 533956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor return 0; 543956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor } 553956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor} 56