[cfe-commits] r160855 - in /cfe/trunk: lib/Sema/SemaLookup.cpp test/SemaCXX/pr13394-crash-on-invalid.cpp

Eli Friedman eli.friedman at gmail.com
Fri Jul 27 11:00:14 PDT 2012


On Fri, Jul 27, 2012 at 3:21 AM, Benjamin Kramer
<benny.kra at googlemail.com> 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



More information about the cfe-commits mailing list