[PATCH] RFC: fail-fast iterators for DenseMap

Chandler Carruth chandlerc at google.com
Mon Mar 2 20:37:26 PST 2015


On Mon, Mar 2, 2015 at 8:35 PM, Duncan P. N. Exon Smith <
dexonsmith at apple.com> wrote:

> > For `==` and `!=, you shouldn't worry about whether the handle is in sync
> > with the debug base -- if anything, you should just check that the two
> > handles are pointing at the same debug base (and have the same epoch as
> > each other).  (But I still don't see how you've modified `==` or `!=`.)
> >
> > The comparison operators call operator->
>
> (Sorry, should have just looked at the code myself.)
>
> That's silly though.  They should just be:
>
>     bool operator==(const ConstIterator &RHS) const { return Ptr ==
> RHS.Ptr; }
>     bool operator!=(const ConstIterator &RHS) const { return Ptr !=
> RHS.Ptr; }
>
> Calling `->` is needlessly complicated.


Sure.

But I think we *should* check the epoch here as comparing an invalid
iterator with a valid iterator should also be caught. I would check that
the address of the epoch are the same, and if they are non-null, that all
three epoch's (the pointed too and both iterator's copies) are in sync.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150302/267e31e5/attachment.html>


More information about the llvm-commits mailing list