diff mbox series

[committed] Add testcase for already fixed PR (PR c++/84496)

Message ID 20180222095659.GU5867@tucnak
State New
Headers show
Series [committed] Add testcase for already fixed PR (PR c++/84496) | expand

Commit Message

Jakub Jelinek Feb. 22, 2018, 9:56 a.m. UTC
Hi!

ICE on this testcase has been introduced in r236615 and got fixed on the trunk
with r253600.  I've committed the testcase to trunk, so that we don't
regress in it as obvious.

2018-02-22  Jakub Jelinek  <jakub@redhat.com>

	PR c++/84496
	* g++.dg/cpp1y/pr84496.C: New test.


	Jakub
diff mbox series

Patch

--- gcc/testsuite/g++.dg/cpp1y/pr84496.C.jj	2018-02-22 10:53:30.311132498 +0100
+++ gcc/testsuite/g++.dg/cpp1y/pr84496.C	2018-02-22 10:45:29.102352811 +0100
@@ -0,0 +1,44 @@ 
+// PR c++/84496
+// { dg-do compile { target c++14 } }
+
+template <typename T, T n> struct C { static constexpr T D = n; };
+struct E : C<bool, false> {};
+template <typename> struct F : C<bool, false> {};
+template <typename T> T foo ();
+template <typename> struct H { typedef int G; };
+template <typename> class I;
+struct L;
+template <typename, typename> struct J;
+template <bool, bool, typename...> struct K;
+struct R {
+  template <typename M, typename... N>
+  static J<decltype (foo<M> () (foo<N>...)), L> o;
+};
+template <typename P, typename... Q> struct K<false, false, P, Q...> : R {
+  typedef decltype (o<P, Q...>) G;
+};
+template <typename P, typename... Q>
+struct D : K<E::D, F<typename H<P>::G>::D, P, Q...> {};
+template <typename P, typename... Q> struct I<P (Q...)> : D<P, Q...> {};
+template <typename> class function;
+template <typename S, typename... Q> struct function<S (Q...)> {
+  template <typename T, typename = typename I<T (Q...)>::G> struct C;
+  template <typename, typename> using U = int;
+  template <typename P, typename = U<int, void>, typename = U<C<P>, void>>
+  function (P);
+};
+template <typename S, typename... Q>
+template <typename P, typename, typename>
+function<S (Q...)>::function (P)
+{
+}
+void bar (function<void (int)>);
+
+void
+baz ()
+{
+  auto a = [] {
+    static int counter;
+    bar ([] (auto) { counter++; });
+  };
+}