http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59548

            Bug ID: 59548
           Summary: Abort after copying std::unordered_map in debug mode
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: max at duempel dot org

Created attachment 31471
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31471&action=edit
Demo code

Create an std::unordered_map and save its end() to a variable. Then copy the
std::unordered_map to a temporary variable, and destruct it. Now the iterator
will be "detached", and dereferencing it causes an abort:

/usr/include/c++/4.8/debug/safe_iterator.h:279:error: attempt to 
    dereference a singular iterator.

Objects involved in the operation:
iterator "this" @ 0x0x7fff741c4f40 {
type =
N11__gnu_debug14_Safe_iteratorINSt8__detail14_Node_iteratorISt4pairIKiiELb0ELb0EEENSt7__debug13unordered_mapIiiSt4hashIiESt8equal_toIiESaIiEEEEE
(mutable iterator);
  state = singular;
}
Aborted

Minimal demo code and bug fix attached.

I suggest disabling _Safe_sequence_base's implicit copy constructor to avoid
future bugs like that. Patch attached.

Reply via email to