On Thu Jul 9, 2026 at 4:58 PM CEST, Martin Jambor wrote: > Hello, > > On Tue, Jun 23 2026, Josef Melcr wrote: >> Hi, >> this patch adds a missing call to edge duplication hooks in >> cgraph_edge::make_callback. >> >> In PR125121, we get an ICE in ipa-sra when compiling with -fno-ipa-cp, >> because the analysis in ipa-prop runs after sra generates its summaries. >> Because of the missing call to the hooks, the summaries required by sra >> don't get copied over for the newly added callback edges, leading to >> segfaults. This patch adds the call to the hooks to remedy this. It >> also changes some of the initialization logic for summaries for callback >> edges to make it a little more consistent. >> >> Bootstrapped and regtested x86-linux without issues. Also bootstrapped >> and regtested with RUNTESTFLAGS="--target_board=unix/-fno-ipa-cp" to >> check for different problems of the same nature, none found. >> >> OK for master and 16 backport? >> >> Best regards, >> Josef >> >> PR 125121 >> >> gcc/ChangeLog: >> >> * cgraph.cc (cgraph_edge::make_callback): Add missing call to >> duplication hooks. >> * ipa-prop.cc (init_callback_edge_summary): Remove function. >> (ipa_compute_jump_functions_for_edge): Remove call to >> init_callback_edge_summary, fix comment. >> (ipa_edge_args_sum_t::duplicate): Fix the initialization of jump >> functions vector for callback edges. > > This is OK for both branches, just please... > >> >> gcc/testsuite/ChangeLog: >> >> * c-c++-common/gomp/pr125121.c: New test. >> >> Signed-off-by: Josef Melcr <[email protected]> >> --- >> gcc/cgraph.cc | 1 + >> gcc/ipa-prop.cc | 26 ++++++++++------------ >> gcc/testsuite/c-c++-common/gomp/pr125121.c | 11 +++++++++ >> 3 files changed, 24 insertions(+), 14 deletions(-) >> create mode 100644 gcc/testsuite/c-c++-common/gomp/pr125121.c >> >> diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc >> index 13ea9c34629..4b22cad9f11 100644 >> --- a/gcc/cgraph.cc >> +++ b/gcc/cgraph.cc >> @@ -1383,6 +1383,7 @@ cgraph_edge::make_callback (cgraph_node *n2, unsigned >> int callback_id) >> else >> e2->can_throw_external = can_throw_external; >> e2->lto_stmt_uid = lto_stmt_uid; >> + symtab->call_edge_duplication_hooks (this, e2); >> n2->mark_address_taken (); >> return e2; >> } >> diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc >> index 625a2b25969..dbd26f9453c 100644 >> --- a/gcc/ipa-prop.cc >> +++ b/gcc/ipa-prop.cc >> @@ -2480,18 +2480,6 @@ skip_a_safe_conversion_op (tree t) >> return t; >> } >> >> -/* Initializes ipa_edge_args summary of CBE given its callback-carrying >> edge. >> - This primarily means allocating the correct amount of jump functions. */ >> - >> -static inline void >> -init_callback_edge_summary (struct cgraph_edge *cbe, tree attr) >> -{ >> - ipa_edge_args *cb_args = ipa_edge_args_sum->get_create (cbe); >> - size_t jf_vec_length = callback_num_args(attr); >> - vec_safe_grow_cleared (cb_args->jump_functions, >> - jf_vec_length, true); >> -} >> - >> /* Compute jump function for all arguments of callsite CS and insert the >> information in the jump_functions array in the ipa_edge_args >> corresponding >> to this callsite. */ >> @@ -2631,7 +2619,7 @@ ipa_compute_jump_functions_for_edge (struct >> ipa_func_body_info *fbi, >> } >> >> /* If a callback attribute describing this pointer is found, >> - create a callback edge to the pointee function to >> + create a callback edge to the pointee function to >> allow for further optimizations. */ >> if (callback_attr) >> { >> @@ -2640,7 +2628,6 @@ ipa_compute_jump_functions_for_edge (struct >> ipa_func_body_info *fbi, >> unsigned callback_id = n; >> cgraph_edge *cbe >> = cs->make_callback (kernel_node, callback_id); >> - init_callback_edge_summary (cbe, callback_attr); >> callback_edges.safe_push (cbe); >> } >> } >> @@ -5151,6 +5138,17 @@ ipa_edge_args_sum_t::duplicate (cgraph_edge *src, >> cgraph_edge *dst, >> new_args->jump_functions = NULL; >> return; >> } >> + >> + if (src->has_callback && dst->callback) >> + { > > ...assert here that the two edges have the same caller. > > Thanks! > > Martin
Commited with the assert as r17-2351-g3bbe1a86ccecb1 and r16-9264-gaa41b0bd7fa07e, thanks :) Josef
