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

Soren Soe <gnu at gonsoe dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |gnu at gonsoe dot com

--- Comment #5 from Soren Soe <gnu at gonsoe dot com> ---
I've tried all options.  Fails only when compiled with -O3.

I looked at assembler code on https://godbolt.org, and it appears that with ARM
gcc9.3 the unsigned int variable is not initialized.  The assembler code is
very different if unsigned int is replaced with size_t, or when using -O2, and
appears to show a variable initialized to 0.

void
good()
{
  vec v;
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");

  size_t m = 0;
  for (auto& p : v)
    m = std::max(m, p.first.length());

  assert(m==3);
}

void
bad()
{
  vec v;
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");
  v.emplace_back("abc", "def");

  unsigned int m = 0;
  for (auto& p : v)
    m = std::max<unsigned int>(m, p.first.length());

  assert(m==3);
}

Reply via email to