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

--- Comment #5 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to Matthias Kretz from comment #3)
> GCC 9 almost resolves this. However, for some reason this extended test case
> is not fully optimized: https://gcc.godbolt.org/z/jRrHth
> i.e. the call to dont_call_me() should be eliminated as dead code

We are left with:

_GLOBAL__sub_I__Z1fv ()
{
  <bb 2> [local count: 1073741824]:
  d = 125;
  return;

}

f ()
{
  unsigned int d.1_1;

  <bb 2> [local count: 1073741824]:
  d.1_1 = d;
  if (d.1_1 == 125)
[...]

This is a classic, if the initialization of global variables is only noticed to
be constant after optimizations (as opposed to in the front-end), gcc doesn't
manage to turn the dynamic initialization into a static one. Making the
intrinsics constexpr may help, but really this is something that would be nice
to fix eventually, there are several PRs blocked by this.

Reply via email to