[LLVMdev] Iterator issue in BranchFolder::RemoveBlocksWithHash?

Nicolas Capens nicolas at capens.net
Fri May 23 04:10:18 PDT 2008


Hi all,

 

I updated from 2.2 to the latest SVN head and I now get a debug assert in
BranchFolder::RemoveBlocksWithHash: "vector iterators incompatible". I'm
using Visual C++ 2005. I think this is the culprit code:

 

    MergePotentials.erase(CurMPIter);

    if (CurMPIter==B) 

      break;

 

The erase clears the _Mycont field (i.e. the iterator's container), while
the == expects CurMPIter and B to have the same container. I'm no STL guru
but it seems wrong to first erase an element and then try to compare it. I
traced it back to revision 50921 made on May 10'th. I rewrote it like
following, which I'm not entirely sure is the intended behavior but it
'works for me':

 

    CurMPIter = MergePotentials.erase(CurMPIter);

    if (CurMPIter==B) 

      break;

 

Kind regards,

 

Nicolas Capens

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080523/9af5f6b1/attachment.html>


More information about the llvm-dev mailing list