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); }