diff mbox series

[committed] Another testcase for already fixed PR (PR c++/53574)

Message ID 20171016083826.GQ14653@tucnak
State New
Headers show
Series [committed] Another testcase for already fixed PR (PR c++/53574) | expand

Commit Message

Jakub Jelinek Oct. 16, 2017, 8:38 a.m. UTC
Hi!

Paolo has pinged me about this PR, which is indeed fixed for years.
I've checked in a slightly further reduced testcase as obvious.

2017-10-16  Jakub Jelinek  <jakub@redhat.com>

	PR c++/53574
	* g++.dg/other/pr53574.C: New test.


	Jakub
diff mbox series

Patch

--- gcc/testsuite/g++.dg/other/pr53574.C.jj	2017-10-16 10:12:51.387091133 +0200
+++ gcc/testsuite/g++.dg/other/pr53574.C	2017-10-16 10:29:49.000000000 +0200
@@ -0,0 +1,48 @@ 
+// PR c++/53574
+// { dg-do compile { target c++11 } }
+// { dg-options "-fstack-usage" }
+
+template <typename> struct A { typedef int type; };
+struct B {
+  typedef __SIZE_TYPE__ H;
+};
+template <typename> class allocator : B {};
+template <typename _Alloc> struct C {
+  template <typename T>
+  static typename T::H foo(T *);
+  typedef decltype(foo((_Alloc *)0)) H;
+  template <typename U>
+  static typename A<H>::type bar(U) { return typename A<H>::type (); }
+  static int baz(_Alloc p1) { bar(p1); return 0; }
+};
+template <typename _Alloc> struct I : C<_Alloc> {};
+template <typename, typename> struct J {
+  typedef I<allocator<int>> K;
+  K k;
+};
+struct D : J<int, allocator<int>> {
+  void fn(int, int) {
+    K m;
+    I<K>::baz(m);
+  }
+};
+template <class Ch, class = int, class = int> struct F {
+  F();
+  F(const Ch *);
+  F test();
+  D d;
+};
+int l;
+struct G {
+  G(F<char>);
+};
+char n;
+template <class Ch, class Tr, class Alloc> F<Ch, Tr, Alloc>::F(const Ch *) {
+  test();
+}
+template <class Ch, class Tr, class Alloc>
+F<Ch, Tr, Alloc> F<Ch, Tr, Alloc>::test() {
+  d.fn(l, 0);
+  return F<Ch, Tr, Alloc> ();
+}
+G fn1() { return G(&n); }