diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/eh/elide1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/eh/elide1.C | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/eh/elide1.C b/gcc/testsuite/g++.dg/eh/elide1.C new file mode 100644 index 000000000..94d2a6982 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/elide1.C @@ -0,0 +1,30 @@ +// PR c++/13944 + +// Bug: When eliding the copy from the A temporary into the exception +// object, we extended the throw prohibition to the constructor for the +// temporary. This is wrong; the throw from A() should propagate normally +// regardless of the elision of the temporary. + +// { dg-do run } + +struct A +{ + A() { throw 0; } +}; + +int main() +{ + try + { + throw A(); + } + catch(int i) + { + return i; + } + catch (...) + { + return 2; + } + return 3; +} |