https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106434
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- We diagnose MEM[(struct _Alloc_hider *)0B]._M_p = 16B; that's conditional on if (_178 == 0B) so probably constant propagated from that. That on the other hand is conditional on if (_178 != _179) with _178 = unique.D.69649._M_impl.D.68955._M_finish; _179 = unique.D.69649._M_impl.D.68955._M_end_of_storage; from vector::insert: insert(iterator __position, const value_type& __x) #endif { const size_type __n = __position - begin(); if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) if (__position == end()) { _GLIBCXX_ASAN_ANNOTATE_GROW(1); _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, __x); ++this->_M_impl._M_finish; _GLIBCXX_ASAN_ANNOTATE_GREW(1); for some reason __position is NULL here, from iin.iter._M_current = 0B; it seems. I'm a bit lost here.