On Fri, Jul 27, 2012 at 3:21 AM, Benjamin Kramer <[email protected]> wrote: > Author: d0k > Date: Fri Jul 27 05:21:08 2012 > New Revision: 160855 > > URL: http://llvm.org/viewvc/llvm-project?rev=160855&view=rev > Log: > Fix PR13394: Erasing from a vector changes the end of the vector, so make > sure we always have the right end. > > Added: > cfe/trunk/test/SemaCXX/pr13394-crash-on-invalid.cpp > Modified: > cfe/trunk/lib/Sema/SemaLookup.cpp > > Modified: cfe/trunk/lib/Sema/SemaLookup.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=160855&r1=160854&r2=160855&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaLookup.cpp (original) > +++ cfe/trunk/lib/Sema/SemaLookup.cpp Fri Jul 27 05:21:08 2012 > @@ -3895,13 +3895,13 @@ > // If a validator callback object was given, drop the correction > // unless it passes validation. > bool Viable = false; > - for (TypoResultList::iterator RI = I->second.begin(), RIEnd = > I->second.end(); > - RI != RIEnd; /* Increment in loop. */) { > + for (TypoResultList::iterator RI = I->second.begin(); > + RI != I->second.end(); /* Increment in loop. */) { > TypoResultList::iterator Prev = RI; > ++RI; > if (Prev->isResolved()) { > if (!isCandidateViable(CCC, *Prev)) > - I->second.erase(Prev); > + RI = I->second.erase(Prev); > else > Viable = true; > }
I only looked briefly before, but I think there's another iterator invalidation issue nearby. -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
