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)

Reply via email to