https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109462
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- When stepping through the function in the debugger, the difference appears in the Token I; Token Result; int p_count = 0; while (!TheLexer.LexFromRawLexer(I)) { if (I.getKind() == tok::l_paren) ++p_count; if (I.getKind() == tok::r_paren) { if (p_count == 1) break; --p_count; } Result = I; } loop followed by: if (isAnyIdentifier(Result.getKind())) { I see 7 iterations of the loop where the 2nd increments p_count to 1 and then in the expected behavior we reach the isAnyIdentifier expression in the if statement after the loop. In the non-expected behavior also 7 iterations, but in the last one I see: 1157 if (I.getKind() == tok::l_paren) (gdb) 1159 if (I.getKind() == tok::r_paren) { (gdb) 1160 if (p_count == 1) (gdb) n 1184 } (gdb) n (anonymous namespace)::EmptyLocalizationContextChecker::MethodCrawler::VisitChildren (this=0x7fffffffb830, S=<optimized out>) at /usr/src/llvm-project/clang/lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:1060 1060 for (const Stmt *Child : S->children()) { so basically it didn't break but did return or so. The expected behavior under debugger was: 1157 if (I.getKind() == tok::l_paren) (gdb) 1159 if (I.getKind() == tok::r_paren) { (gdb) 1160 if (p_count == 1) (gdb) 1167 if (isAnyIdentifier(Result.getKind())) { so, I think the 2nd iteration has I.getKind() == tok::l_paren and the 7th == tok::r_paren and no other iteration has those kinds.