c++: Add tests for PR93922 and PR94041.
authorJason Merrill <jason@redhat.com>
Tue, 10 Mar 2020 20:43:58 +0000 (16:43 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 10 Mar 2020 20:47:51 +0000 (16:47 -0400)
gcc/testsuite/g++.dg/cpp0x/initlist121.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist122.C [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist121.C b/gcc/testsuite/g++.dg/cpp0x/initlist121.C
new file mode 100644 (file)
index 0000000..c12006c
--- /dev/null
@@ -0,0 +1,31 @@
+// PR c++/93922
+// { dg-do link { target c++11 } }
+
+template <typename T>
+struct A {
+  A () {}
+  template <typename U>
+  A (A<U> const &) {}
+  ~A () {}
+};
+int t;
+struct B {};
+struct C : B { C (B const &) { if (t) throw 1; } };
+struct S { A<B const> x; C y; };
+
+A<B>
+bar (B *)
+{
+  return A<B> ();
+}
+
+S *
+foo (B *x, B const &y)
+{
+  return new S {bar (x), y};
+}
+
+int
+main ()
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist122.C b/gcc/testsuite/g++.dg/cpp0x/initlist122.C
new file mode 100644 (file)
index 0000000..002bc1e
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/94041
+// { dg-do run { target c++11 } }
+
+bool gone;
+struct Temp { ~Temp() { gone = true; } };
+struct A{ A() {}; A(const Temp&) noexcept {};  };
+struct B{ ~B() {}; };
+struct Pair{ A a; B b; };
+
+void foo(const Pair&) noexcept { if (gone) __builtin_abort(); }
+
+int main()
+{
+  foo({A(Temp{}), B()});
+  if (!gone) __builtin_abort ();
+}