Skip to content

Commit

Permalink
[Sema] Add a crazy test case for r243987
Browse files Browse the repository at this point in the history
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
  • Loading branch information
d0k committed Aug 4, 2015
1 parent e0a5c09 commit a00e997
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions clang/test/SemaCXX/many-template-parameter-lists.cpp
@@ -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}}
}

0 comments on commit a00e997

Please sign in to comment.