+2010-09-07 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/45569
+ * tree-eh.c (operation_could_trap_helper_p): Neither COMPLEX_EXPR
+ nor CONSTRUCTOR can trap.
+ * tree-complex.c (update_complex_assignment): Update EH info.
+
2010-09-07 Richard Guenther <rguenther@suse.de>
PR middle-end/45569
update_complex_assignment (gimple_stmt_iterator *gsi, tree r, tree i)
{
gimple_stmt_iterator orig_si = *gsi;
+ gimple stmt;
if (gimple_in_ssa_p (cfun))
update_complex_components (gsi, gsi_stmt (*gsi), r, i);
gimple_assign_set_rhs_with_ops (&orig_si, COMPLEX_EXPR, r, i);
- update_stmt (gsi_stmt (orig_si));
+ stmt = gsi_stmt (orig_si);
+ update_stmt (stmt);
+ if (maybe_clean_eh_stmt (stmt))
+ gimple_purge_dead_eh_edges (gimple_bb (stmt));
}
return true;
return false;
+ case COMPLEX_EXPR:
+ case CONSTRUCTOR:
+ /* Constructing an object cannot trap. */
+ return false;
+
default:
/* Any floating arithmetic may trap. */
if (fp_operation && flag_trapping_math)