https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106502

            Bug ID: 106502
           Summary: Three calls to __attribute__((const)) function
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <system_error>

int main()
{
  __builtin_puts(std::system_category().name());
}

With gcc 12 the resulting assembly is:

        .file   "cat.C"
        .text
        .globl  main
        .type   main, @function
main:
.LFB1309:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        pushq   %rbx
        subq    $8, %rsp
        .cfi_offset 3, -24
        call    _ZNSt3_V215system_categoryEv
        call    _ZNSt3_V215system_categoryEv
        movq    (%rax), %rax
        addq    $16, %rax
        movq    (%rax), %rbx
        call    _ZNSt3_V215system_categoryEv
        movq    %rax, %rdi
        call    *%rbx
        movq    %rax, %rdi
        call    puts
        movl    $0, %eax
        movq    -8(%rbp), %rbx
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE1309:
        .size   main, .-main
        .ident  "GCC: (GNU) 12.1.1 20220507 (Red Hat 12.1.1-1)"
        .section        .note.GNU-stack,"",@progbits


Why is the std::system_category() function called three times?

Reply via email to