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