On Mon, Aug 24, 2026 at 6:05 AM Josef Melcr <[email protected]> wrote: > > Hi, > references are recreated when redirecting edges in the target clone > pass. However, the references are not created with their corresponding > call statements, potentially leading to ICEs as shown in PR127023. This > patch fixes that. > > Bootstrapped, LTO-bootstrapped and regtested on x86_64-linux without any > new regressions. OK for master?
Ok. > > Best regards, > Josef > > PR ipa/127023 > > gcc/ChangeLog: > > * multiple_target.cc (create_dispatcher_calls): Use the call > statement variant of create_reference. > > gcc/testsuite/ChangeLog: > > * gcc.target/i386/pr127023.c: New test. > > Signed-off-by: Josef Melcr <[email protected]> > --- > gcc/multiple_target.cc | 2 +- > gcc/testsuite/gcc.target/i386/pr127023.c | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr127023.c > > diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc > index 3f8676f5943..01d3ff84bf3 100644 > --- a/gcc/multiple_target.cc > +++ b/gcc/multiple_target.cc > @@ -190,7 +190,7 @@ create_dispatcher_calls (struct cgraph_node *node) > } > > symtab_node *source = ref->referring; > - source->create_reference (inode, IPA_REF_ADDR); > + source->create_reference (inode, IPA_REF_ADDR, ref->stmt); > } > else if (ref->use == IPA_REF_ALIAS) > { > diff --git a/gcc/testsuite/gcc.target/i386/pr127023.c > b/gcc/testsuite/gcc.target/i386/pr127023.c > new file mode 100644 > index 00000000000..ecd6af57cf6 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr127023.c > @@ -0,0 +1,16 @@ > +/* PR ipa/127023 */ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fopenmp" } */ > +/* { dg-require-ifunc "" } */ > + > +__attribute__((target_clones("default", "fma4"), noinline)) > +static void e(int f) { > + if (!f) > +#pragma omp parallel > + for (;;) > + ; > +} > +__attribute__((target_clones("default", "fma4"))) > +void g(void) { > + e(1); > +} > -- > 2.55.0 >
