https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90905
--- Comment #7 from Marc Glisse <glisse at gcc dot gnu.org> --- (In reply to Martin Sebor from comment #6) > With str being a local (non-reference) variable this should be diagnosed > because of the str.D.28972._M_local_buf(12): > > # _47 = PHI <_59(9), &str.D.28972._M_local_buf(12), _59(8)> > str ={v} {CLOBBER}; > return _47; the dump above was obtained from your testcase, compiled with a slightly hacked libstdc++ +++ basic_string.h 2019-06-18 17:40:06.435533019 +0200 @@ -214,7 +214,9 @@ _M_set_length(size_type __n) { _M_length(__n); + auto X = _M_data(); traits_type::assign(_M_data()[__n], _CharT()); + if(X!=_M_data())__builtin_unreachable(); } bool +++ basic_string.tcc 2019-06-18 17:38:00.755534757 +0200 @@ -221,8 +221,12 @@ } // Check for out_of_range and length_error exceptions. + auto X = _M_data(); __try - { this->_S_copy_chars(_M_data(), __beg, __end); } + { + this->_S_copy_chars(_M_data(), __beg, __end); + if(X!=_M_data())__builtin_unreachable(); + } __catch(...) { _M_dispose(); and I am really not seeing a warning. But that's probably because the path-isolation pass is too early (from a warning PoV), the IL doesn't look that nice at that time yet.