https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78940
--- Comment #4 from Avi Kivity <a...@cloudius-systems.com> --- Since constexpr constructors do send the variable into the .data (or .tls) section, perhaps gcc can attempt to evaluate the initializer as if it (and any functions it calls) was marked constexpr. If it fails it can emit the guard and initialization calls, but if it succeeds, we save some runtime to check those guards.