https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93384
--- Comment #20 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I've tried to create small testcase for this: __attribute__((noipa, noreturn)) void foo (void) { while (1) ; } __attribute__((noinline)) void bar (void) { asm (""); foo (); } void baz (int x) { if (x) bar (); } and extern void bar (void); void qux (int x) { if (!x) bar (); } ./xgcc -B ./ -O2 -flto -ffat-lto-objects pr93384_0.c -S -fpic -fno-semantic-interposition ./xgcc -B ./ -O2 -flto -ffat-lto-objects pr93384_1.c -S -fpic -fno-semantic-interposition as -o pr93384_0.{o,s} as -o pr93384_1.{o,s} ./xgcc -B ./ -O2 -flto -shared -fpic -fno-semantic-interposition -o pr93384.so pr93384_{0,1}.o -save-temps -v -flto-partition=one but unfortunately (at least on x86_64-linux) it doesn't reproduce this, the bar.localalias gets suffixed in one case to bar.localalias.lto_priv.0 and in another one (though it didn't exist in the assembly at that point) to bar.localalias.lto_priv.1.