r243989 - [Sema] Add a crazy test case for r243987

Benjamin Kramer benny.kra at googlemail.com
Tue Aug 4 08:18:17 PDT 2015


Author: d0k
Date: Tue Aug  4 10:18:16 2015
New Revision: 243989

URL: http://llvm.org/viewvc/llvm-project?rev=243989&view=rev
Log:
[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.

Added:
    cfe/trunk/test/SemaCXX/many-template-parameter-lists.cpp

Added: cfe/trunk/test/SemaCXX/many-template-parameter-lists.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/many-template-parameter-lists.cpp?rev=243989&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/many-template-parameter-lists.cpp (added)
+++ cfe/trunk/test/SemaCXX/many-template-parameter-lists.cpp Tue Aug  4 10:18:16 2015
@@ -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}}
+}





More information about the cfe-commits mailing list