public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99452] New: Inconsistent constinit handling
@ 2021-03-07 15:27 nathan at gcc dot gnu.org
2021-03-07 15:55 ` [Bug c++/99452] " nathan at gcc dot gnu.org
2021-03-08 14:22 ` jakub at gcc dot gnu.org
0 siblings, 2 replies; 3+ messages in thread
From: nathan at gcc dot gnu.org @ 2021-03-07 15:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99452
Bug ID: 99452
Summary: Inconsistent constinit handling
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nathan at gcc dot gnu.org
Target Milestone: ---
constinit forces static initialization (or error). Sadly the std doesn't
permit c++98-era address-constant expressions (symbol + addend). but we do
accept that (probably a bug std=c++20 vs std=gnu++20 makes no difference)
But we do so inconsistently. Both x & y are initializable in this manner --
and we do emit such an initialization if the constinit is removed, regardless
of optimization level.
But with constinit, the presence of the OR operator causes y's initialization
to be rejected. Even though it's totally foldable.
constinit long x = reinterpret_cast<long> (&x) + 0;
constinit long y = reinterpret_cast<long> (&y) + (0|0);
gcc-current/bin/g++ -c c.cc -std=c++20
c.cc:4:16: error: ‘constinit’ variable ‘y’ does not have a constant initializer
4 | constinit long y = reinterpret_cast<long> (&y) + (0|0);
| ^
c.cc:4:20: error: conversion from pointer type ‘long int*’ to arithmetic type
‘long int’ in a constant expression
4 | constinit long y = reinterpret_cast<long> (&y) + (0|0);
Please note I plan an EWG paper to allow symbol+addend, as that seems a useful
behaviour.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-03-08 14:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-07 15:27 [Bug c++/99452] New: Inconsistent constinit handling nathan at gcc dot gnu.org
2021-03-07 15:55 ` [Bug c++/99452] " nathan at gcc dot gnu.org
2021-03-08 14:22 ` jakub at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).