https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83990
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think this started with r246301. This warning s an optimization warning and as the wording says, can have false positives, the optimizer during path isolation simply finds a basic block containing a pointer dereference where the pointer is known to be NULL on some predecessor edge to the BB. basic_string(basic_string&& __str) noexcept : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) { if (__str._M_is_local()) { traits_type::copy(_M_local_buf, __str._M_local_buf, _S_local_capacity + 1); } and template<typename _InputIterator, typename _ForwardIterator> static _ForwardIterator __uninit_copy(_InputIterator __first, _InputIterator __last, _ForwardIterator __result) { _ForwardIterator __cur = __result; __try { for (; __first != __last; ++__first, (void)++__cur) std::_Construct(std::__addressof(*__cur), *__first); return __cur; } are the relevant snippets, the __first != __last guard is what guards the basic block and the optimizers see some possibility that __first could be NULL in some case.