https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105423
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2022-04-29 00:00:00 |2025-09-05 Ever confirmed|0 |1 Status|UNCONFIRMED |WAITING --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think this was reduced too much. Because mask._S_copy___d; is not set in the testcase. So we get: ``` MEM[(struct __as_base &)&mask] ={v} {CLOBBER(bob)}; mask._M_dataplus._M_p = &mask.D.2786._M_local_buf; if (&mask.D.2786._M_local_buf >= "RC") goto <bb 3>; [33.00%] else goto <bb 5>; [67.00%] <bb 5> [local count: 719407024]: goto <bb 4>; [100.00%] <bb 3> [local count: 354334800]: _11 = MEM[(char *)&mask + 10B]; _12 = mask._S_copy___d; ``` > default brace-initialized that is not have C++20 works though. The rules in C++20 changed such that `std::Trans_NS___cxx11_basic_string<char> mask{};` will call the constructor with no arguments.