On Tue, Aug 12, 2025 at 8:59 AM Andrew Pinski <andrew.pin...@oss.qualcomm.com> wrote: > > From: Andrew Pinski <andrew.pin...@oss.qualcomm.com> > > Note this conflicts with my not yet approved patch for copy prop for > aggregates into > function arguments (I will get back to that soon). > > So the problem here is that I assumed if: > *a = decl1; > would not cause an exception that: > decl2 = *a; > would cause not cause one too. > > I was wrong, in some cases where the Ada front-end marks `*a` in the store > as TREE_THIS_NOTRAP (due to knowing never be null or some other cases). > So that means when we prop decl1 into the statement storing decl2, we need to > mark that statement as possible to cleanup for eh. > > Bootstraped and tested on x86_64-linux-gnu. > Also tested on x86_64-linux-gnu with a hack to force generate LC constant > decls in the gimplifier.
OK. > PR tree-optimization/121494 > gcc/ChangeLog: > > * tree-ssa-forwprop.cc (optimize_agr_copyprop): Mark the bb of the use > stmt if needed for eh cleanup. > > Signed-off-by: Andrew Pinski <andrew.pin...@oss.qualcomm.com> > --- > gcc/tree-ssa-forwprop.cc | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc > index 1cde5f85150..4237a2013ba 100644 > --- a/gcc/tree-ssa-forwprop.cc > +++ b/gcc/tree-ssa-forwprop.cc > @@ -1487,6 +1487,7 @@ optimize_agr_copyprop (gimple_stmt_iterator *gsip) > fprintf (dump_file, "after previous\n "); > print_gimple_stmt (dump_file, stmt, 0, dump_flags); > } > + gimple *orig_stmt = use_stmt; > gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt); > gimple_assign_set_rhs_from_tree (&gsi, unshare_expr (src)); > update_stmt (use_stmt); > @@ -1496,6 +1497,10 @@ optimize_agr_copyprop (gimple_stmt_iterator *gsip) > fprintf (dump_file, "into\n "); > print_gimple_stmt (dump_file, use_stmt, 0, dump_flags); > } > + > + /* Mark the bb for eh cleanup if needed. */ > + if (maybe_clean_or_replace_eh_stmt (orig_stmt, use_stmt)) > + bitmap_set_bit (to_purge, gimple_bb (stmt)->index); > statistics_counter_event (cfun, "copy prop for aggregate", 1); > changed = true; > } > -- > 2.34.1 >