[Sema] Add a crazy test case for r243987

It's not valid code (maybe it can be made valid, but I'm not sure how).
To trigger the crash fixed in r243987 requires a friend function with
more than four template parameter lists. With this test we have at least
some coverage.

llvm-svn: 243989
This commit is contained in:
Benjamin Kramer 2015-08-04 15:18:16 +00:00
parent e0a5c09a5c
commit a00e997b4f
1 changed files with 36 additions and 0 deletions

View File

@ -0,0 +1,36 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// This is not well-formed C++ but used to crash in sema.
template <class T>
struct X {
template <class U>
struct A { // expected-note {{not-yet-instantiated member is declared here}}
template <class V>
struct B {
template <class W>
struct C {
template <class X>
struct D {
template <class Y>
struct E {
template <class Z>
void operator+=(Z);
};
};
};
};
};
template <class U>
template <class V>
template <class W>
template <class X>
template <class Y>
template <class Z>
friend void A<U>::template B<V>::template C<W>::template D<X>::template E<Y>::operator+=(Z); // expected-warning {{not supported}} expected-error {{no member 'A' in 'X<int>'; it has not yet been instantiated}}
};
void test() {
X<int>::A<int>::B<int>::C<int>::D<int>::E<int>() += 1.0; // expected-note {{in instantiation of template class 'X<int>' requested here}}
}