================ @@ -1295,13 +1305,18 @@ FormatToken *FormatTokenLexer::getNextToken() { case '/': // The text was entirely whitespace when this loop was entered. Thus // this has to be an escape sequence. - assert(Text.substr(i, 2) == "\\\r" || Text.substr(i, 2) == "\\\n" || - Text.substr(i, 4) == "\?\?/\r" || + assert(Text.substr(i, 4) == "\?\?/\r" || Text.substr(i, 4) == "\?\?/\n" || (i >= 1 && (Text.substr(i - 1, 4) == "\?\?/\r" || Text.substr(i - 1, 4) == "\?\?/\n")) || (i >= 2 && (Text.substr(i - 2, 4) == "\?\?/\r" || - Text.substr(i - 2, 4) == "\?\?/\n"))); + Text.substr(i - 2, 4) == "\?\?/\n")) || + (Text[i] == '\\' && [&]() -> bool { + size_t j = i + 1; + while (j < Text.size() && isHorizontalWhitespace(Text[j])) + ++j; + return j < Text.size() && (Text[j] == '\n' || Text[j] == '\r'); + }())); ---------------- HazardyKnusperkeks wrote:
The question is, why was it put there. But I have a hard time understanding it, how can `Text.substr(i, 4)` be equal to `??/\r`, when `Text[i]` is `/`? I think an assert is fine, but it needs to be reformulated, and maybe add a comment about trigraph. I at least keep forgetting, that these things exist(ed). https://github.com/llvm/llvm-project/pull/145243 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits