diff mbox series

[committed] Add testcase for already fixed PR c++/89648

Message ID 20190310130453.GU7611@tucnak
State New
Headers show
Series [committed] Add testcase for already fixed PR c++/89648 | expand

Commit Message

Jakub Jelinek March 10, 2019, 1:04 p.m. UTC
Hi!

The following testcase reduced from webkitgtk started to be rejected with r268850
and is accepted again since r269265.  The testcase isn't very similar to the
committed one, so I've tested following on x86_64-linux both with trunk and
with r269264 and committed to trunk as obvious.

2019-03-10  Jakub Jelinek  <jakub@redhat.com>

	PR c++/89648
	* g++.dg/cpp0x/lambda/lambda-89648.C: New test.


	Jakub
diff mbox series

Patch

--- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89648.C.jj	2019-03-10 13:58:44.799976329 +0100
+++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89648.C	2019-03-10 13:57:25.095281265 +0100
@@ -0,0 +1,30 @@ 
+// PR c++/89648
+// { dg-do compile { target c++11 } }
+
+template <typename T, T U> struct A { static const T e = U; };
+template <typename> struct B;
+template <unsigned long, typename> struct C;
+template <long i, typename T> using E = typename C<i, T>::k;
+template <typename T, T...> struct F {};
+template <typename T, T U> using G = F<T, __integer_pack(U)...>;
+template <unsigned long... U> using H = F<unsigned long, U...>;
+template <unsigned long U> using I = G<unsigned long, U>;
+template <typename...> class J {};
+template <typename... U> struct B<J<U...>> : A<long, sizeof...(U)> {};
+template <unsigned long N, typename T, typename... U>
+struct C<N, J<T, U...>> : C<N - 1, J<U...>> {};
+template <typename T, typename... U> struct C<0, J<T, U...>> { typedef T k; };
+template <unsigned long N, typename... U> E<N, J<U...>> qux (J<U...>);
+struct D { template <typename T> void foo (T) {} };
+void bar (...);
+struct K { void baz (int &); int l; D m; int *n, o; };
+template <typename T, typename U, typename V, unsigned long... W>
+void quux (int, int *, D x, int *, int, int, T, U, V y, H<W...>) {
+  x.foo ([=] { bar (qux <W>(y)...); });
+}
+void K::baz (int &x) {
+  J<int, int> p;
+  int q, r;
+  long s;
+  quux (x, &l, m, n, o, r, s, q, p, I<B<decltype(p)>::e> ());
+}