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?