diff options
author | Jason Merrill <jason@redhat.com> | 2020-03-10 16:43:58 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2020-03-10 16:47:51 -0400 |
commit | b269a014771776f860730874095dffb34839a466 (patch) | |
tree | d76adc452328cad5fc18c0a392c3580cce29425c | |
parent | 14af5d9b19b0f4ee1d929e505e245ae5c2f6bdc6 (diff) | |
download | gcc-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.C | 31 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist122.C | 16 |
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 (); +} |