Reapply "ADT: Require explicit ilist iterator/pointer conversions"


Reapply "ADT: Require explicit ilist iterator/pointer conversions"

This reverts commit r252373, reapplying r252372 now that I've updated
clang-tools-extra. Original commit message follows.

ADT: Require explicit ilist iterator/pointer conversions

Disallow implicit conversions between ilist iterators and element
points. Explicit conversions still work of course.

This is the first step toward removing the undefined behaviour in
ilist and iplist:

The motivation for removing the implicit iterators is that I came across
real bugs (that were *really* getting lucky). More details and some
brief discussion later in that thread:

Note: if you have out-of-tree code, it should be fairly easy to revert
this patch downstream while you update your out-of-tree call sites.
Note that these conversions are occasionally latent bugs (that may
happen to "work" now, but only because of getting lucky with UB;
follow-ups will change your luck). When they are valid, I suggest using
->getIterator() to go from pointer to iterator, and &* to go from
iterator to pointer.


dexonsmithNov 6 2015, 4:59 PM
rL252379: examples: Remove implicit ilist iterator conversions, NFC