[Bug c++/109268] New: Guard variable still provided for static constinit variable
barry.revzin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Mar 24 00:48:54 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109268
Bug ID: 109268
Summary: Guard variable still provided for static constinit
variable
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: barry.revzin at gmail dot com
Target Milestone: ---
This program:
struct X {
constexpr X() { }
constexpr ~X() { }
};
int main()
{
static constinit X data;
}
compiled on gcc trunk with -std=c++2b -O3 emits:
X::~X() [base object destructor]:
ret
main:
movzx eax, BYTE PTR guard variable for main::data[rip]
test al, al
je .L14
xor eax, eax
ret
.L14:
push rcx
mov edi, OFFSET FLAT:guard variable for main::data
call __cxa_guard_acquire
test eax, eax
jne .L15
.L5:
xor eax, eax
pop rdx
ret
.L15:
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZZ4mainE4data
mov edi, OFFSET FLAT:_ZN1XD1Ev
call __cxa_atexit
mov edi, OFFSET FLAT:guard variable for main::data
call __cxa_guard_release
jmp .L5
But data is constant-initialized (enforced by constinit), so there shouldn't be
a need for a guard variable in this context? clang does not generate one in
this case.
More information about the Gcc-bugs
mailing list