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 cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits