https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103534
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |alias, missed-optimization --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note there is one missing optimization: D.42086._M_string_length = 0; MEM[(char_type &)&D.42086 + 16] = 0; MEM[(struct basic_string *)&D.41925] ={v} {CLOBBER}; MEM[(struct _Alloc_hider *)&D.41925] ={v} {CLOBBER}; MEM[(struct _Alloc_hider *)&D.41925]._M_p = &D.41925.D.33308._M_local_buf; _69 = operator new (17); <bb 3> [local count: 1003797485]: D.41925._M_dataplus._M_p = _69; D.41925.D.33308._M_allocated_capacity = 16; __builtin_memcpy (_69, "1234567890123456", 16); D.41925._M_string_length = 16; MEM[(char_type &)_69 + 16] = 0; _75 = D.42086._M_string_length; __size_76 = _75 + 16; pretmp_56 = D.42086._M_dataplus._M_p; if (__size_76 > 16) goto <bb 4>; [67.00%] else goto <bb 12>; [33.00%] This might be related to that GCC does not handle the operator new better. Obvious if that missed optimization is fixed, then the warning will be gone. I also noticed that with -std=c++17 (or before), the constructor for std::string is not inlined fully for both std::string objects which avoids the false positive. This is another case where it is a "maybe" exceeds maximum object size and we need to come up with a solution for it.