re PR c++/24996 (ICE on throw code)
PR c++/24996 * except.c (build_throw): Add a CLEANUP_POINT_EXPR inside the TRY_CATCH_EXPR or MUST_NOT_THROW_EXPR. From-SVN: r110889
This commit is contained in:
parent
1d327c160a
commit
eecb13e859
3 changed files with 17 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-02-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/24996
|
||||
* except.c (build_throw): Add a CLEANUP_POINT_EXPR inside the
|
||||
TRY_CATCH_EXPR or MUST_NOT_THROW_EXPR.
|
||||
|
||||
2006-02-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
* class.c (debug_class): Remove extern.
|
||||
|
|
|
@ -722,6 +722,7 @@ build_throw (tree exp)
|
|||
temp_expr = NULL_TREE;
|
||||
stabilize_init (exp, &temp_expr);
|
||||
|
||||
exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
|
||||
if (elided)
|
||||
exp = build2 (TRY_CATCH_EXPR, void_type_node, exp,
|
||||
do_free_exception (ptr));
|
||||
|
|
10
gcc/testsuite/g++.dg/eh/cond3.C
Normal file
10
gcc/testsuite/g++.dg/eh/cond3.C
Normal file
|
@ -0,0 +1,10 @@
|
|||
// PR c++/24996
|
||||
// Bug: the cleanup for the A temporary was confusing the gimplifier
|
||||
// because of the TRY_CATCH_EXPR for the exception object.
|
||||
|
||||
struct A { A(int); ~A(); };
|
||||
struct B { B(A); ~B(); };
|
||||
void foo(bool b)
|
||||
{
|
||||
throw b ? B(1) : B(1);
|
||||
}
|
Loading…
Add table
Reference in a new issue