aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-03-10 16:43:58 -0400
committerJason Merrill <jason@redhat.com>2020-03-10 16:47:51 -0400
commitb269a014771776f860730874095dffb34839a466 (patch)
treed76adc452328cad5fc18c0a392c3580cce29425c
parent14af5d9b19b0f4ee1d929e505e245ae5c2f6bdc6 (diff)
downloadgcc-b269a014771776f860730874095dffb34839a466.zip
gcc-b269a014771776f860730874095dffb34839a466.tar.gz
gcc-b269a014771776f860730874095dffb34839a466.tar.bz2
c++: Add tests for PR93922 and PR94041.
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist121.C31
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist122.C16
2 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist121.C b/gcc/testsuite/g++.dg/cpp0x/initlist121.C
new file mode 100644
index 0000000..c12006c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist121.C
@@ -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
index 0000000..002bc1e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist122.C
@@ -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 ();
+}