https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110138
--- Comment #1 from Hongyu Wang <wwwhhhyyy333 at gmail dot com> --- operator+ now calls std::__cxx11::basic_string<char, std::char_traits<char>, myAlloc_<char> >::get_allocator, and it will call the constructor again after gimplify __attribute__((nodiscard)) struct allocator_type std::__cxx11::basic_string<char, std::char_traits<char>, myAlloc_<char> >::get_allocator ( const struct basic_string * const this) { try { _1 = std::__cxx11::basic_string<char, std::char_traits<char>, myAlloc_<char> >::_M_get_allocator (this); myAlloc_<char>::myAlloc_ (<retval>, _1); return <retval>; } catch { <<<eh_must_not_throw (terminate)>>> } __builtin_unreachable trap (); } Possibly caused by r13-3814-gc93baa93df2d45