Commit 04be6ff5 by Jakub Jelinek

re PR middle-end/36191 (can't use complex in a eh region if non-call-exceptions is enabled)

	PR c++/36191
	* tree-complex.c (expand_complex_libcall): Call
	maybe_clean_or_replace_eh_stmt and gimple_purge_dead_eh_edges
	instead of passing true as 3rd argument to gsi_replace.

	* g++.dg/torture/pr36191.C: New test.

From-SVN: r142950
parent 67d0afe9
2008-12-29 Jakub Jelinek <jakub@redhat.com>
PR c++/36191
* tree-complex.c (expand_complex_libcall): Call
maybe_clean_or_replace_eh_stmt and gimple_purge_dead_eh_edges
instead of passing true as 3rd argument to gsi_replace.
2008-12-28 Uros Bizjak <ubizjak@gmail.com> 2008-12-28 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/38652 PR middle-end/38652
2008-12-29 Jakub Jelinek <jakub@redhat.com>
PR c++/36191
* g++.dg/torture/pr36191.C: New test.
2008-12-15 Hariharan Sandanagobalane <hariharan@picochip.com> 2008-12-15 Hariharan Sandanagobalane <hariharan@picochip.com>
* gcc.c-torture/execute/builtins/fprintf.x: Disable test for * gcc.c-torture/execute/builtins/fprintf.x: Disable test for
......
// PR c++/36191
// { dg-do compile }
// { dg-options "-fnon-call-exceptions" }
__complex__ double
foo (__complex__ double x, double y)
{
try
{
return x / y;
}
catch (char *s)
{
return x;
}
}
...@@ -953,10 +953,10 @@ expand_complex_libcall (gimple_stmt_iterator *gsi, tree ar, tree ai, ...@@ -953,10 +953,10 @@ expand_complex_libcall (gimple_stmt_iterator *gsi, tree ar, tree ai,
enum machine_mode mode; enum machine_mode mode;
enum built_in_function bcode; enum built_in_function bcode;
tree fn, type, lhs; tree fn, type, lhs;
gimple stmt; gimple old_stmt, stmt;
stmt = gsi_stmt (*gsi); old_stmt = gsi_stmt (*gsi);
lhs = gimple_assign_lhs (stmt); lhs = gimple_assign_lhs (old_stmt);
type = TREE_TYPE (lhs); type = TREE_TYPE (lhs);
mode = TYPE_MODE (type); mode = TYPE_MODE (type);
...@@ -973,7 +973,10 @@ expand_complex_libcall (gimple_stmt_iterator *gsi, tree ar, tree ai, ...@@ -973,7 +973,10 @@ expand_complex_libcall (gimple_stmt_iterator *gsi, tree ar, tree ai,
stmt = gimple_build_call (fn, 4, ar, ai, br, bi); stmt = gimple_build_call (fn, 4, ar, ai, br, bi);
gimple_call_set_lhs (stmt, lhs); gimple_call_set_lhs (stmt, lhs);
update_stmt (stmt); update_stmt (stmt);
gsi_replace (gsi, stmt, true); gsi_replace (gsi, stmt, false);
if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt))
gimple_purge_dead_eh_edges (gsi_bb (*gsi));
if (gimple_in_ssa_p (cfun)) if (gimple_in_ssa_p (cfun))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment