https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117432
Bug ID: 117432
Summary: [11/12/13/14/15 Regression] IPA ICF disregards types
of variadic arguments
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: ipa
Assignee: unassigned at gcc dot gnu.org
Reporter: amonakov at gcc dot gnu.org
Target Milestone: ---
void bar(int tag, ...);
void foo32(void) {
bar(1, -1, 0);
}
void foo64(void) {
bar(1, -1LL, 0);
}
Starting with gcc-10 IPA ICF incorrectly decides that foo64 and foo32 are
clones, and at -Os we get
foo32:
xorl %edx, %edx
orl $-1, %esi
movl $1, %edi
xorl %eax, %eax
jmp bar
foo64:
jmp foo32
(this passes -1u instead of -1ll as second argument to bar, on 32-bit x86 the
terminating zero ends up in the wrong stack position, etc. on other targets)