vsapsai planned changes to this revision.
vsapsai added a comment.
After looking into this more, I think there are 2 different bugs: one with
infinite loop and another with `DelayedTypos.empty() && "Uncorrected typos!"`
assertion. And disabling typo correction happened to fix both of them.
Infinite loop seems to be avoidable by not using ~0U as the guard value, need
to investigate further.
And uncorrected dangling delayed typo bug has a different cause. When we are
checking potential corrections, we have roughly the following behaviour
1. structVarTypo -> structVar; structVarTypo2 -> structVar;
after correction discover more typos
fieldNameTypo -> fieldName; fieldNameTypo2 -> fieldName; // Overall
correction fails but newly discovered typos are processed and removed.
2. structVarTypo -> <empty correction>; structVarTypo2 -> structVar;
correction fails early, don't discover more typos
3. structVarTypo -> structVar; structVarTypo2 -> <empty correction>;
correction fails but we discover fieldNameTypo and the way correction
fails we don't attempt to correct this new delayed typo
4. structVarTypo -> <empty correction>; structVarTypo2 -> <empty correction>;
correction fails early, don't discover more typos
So the typo from step 3 is the one that remains till ~Sema.
I've spent some time looking into Richard's suggestion to correct typos
immediately. That gets more involved than I expected and I want to finish
investigating my other ideas. Now I think that my original approach with
disabling typo correction just hides the issue instead of fixing it. And I feel
like immediate typo correction can be hiding the actual issue too but it is too
early to say.
https://reviews.llvm.org/D47341
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits