PiotrZSL created this revision. Herald added subscribers: carlosgalvezp, xazax.hun. Herald added a reviewer: njames93. Herald added a project: All. PiotrZSL requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
findNextTokenSkippingComments is actually a endless loop, implementing it correctly. rangeContainsExpansionsOrDirectives were skiping every second token, if there were no whitespaces bettwen tokens. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D146881 Files: clang-tools-extra/clang-tidy/utils/LexerUtils.cpp Index: clang-tools-extra/clang-tidy/utils/LexerUtils.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/LexerUtils.cpp +++ clang-tools-extra/clang-tidy/utils/LexerUtils.cpp @@ -78,11 +78,16 @@ std::optional<Token> findNextTokenSkippingComments(SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts) { - std::optional<Token> CurrentToken; - do { - CurrentToken = Lexer::findNextToken(Start, SM, LangOpts); - } while (CurrentToken && CurrentToken->is(tok::comment)); - return CurrentToken; + while (Start.isValid()) { + std::optional<Token> CurrentToken = + Lexer::findNextToken(Start, SM, LangOpts); + if (!CurrentToken || !CurrentToken->is(tok::comment)) + return CurrentToken; + + Start = CurrentToken->getLocation(); + } + + return std::nullopt; } bool rangeContainsExpansionsOrDirectives(SourceRange Range, @@ -91,7 +96,7 @@ assert(Range.isValid() && "Invalid Range for relexing provided"); SourceLocation Loc = Range.getBegin(); - while (Loc < Range.getEnd()) { + while (Loc <= Range.getEnd()) { if (Loc.isMacroID()) return true; @@ -103,7 +108,7 @@ if (Tok->is(tok::hash)) return true; - Loc = Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts).getLocWithOffset(1); + Loc = Tok->getLocation(); } return false;
Index: clang-tools-extra/clang-tidy/utils/LexerUtils.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/LexerUtils.cpp +++ clang-tools-extra/clang-tidy/utils/LexerUtils.cpp @@ -78,11 +78,16 @@ std::optional<Token> findNextTokenSkippingComments(SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts) { - std::optional<Token> CurrentToken; - do { - CurrentToken = Lexer::findNextToken(Start, SM, LangOpts); - } while (CurrentToken && CurrentToken->is(tok::comment)); - return CurrentToken; + while (Start.isValid()) { + std::optional<Token> CurrentToken = + Lexer::findNextToken(Start, SM, LangOpts); + if (!CurrentToken || !CurrentToken->is(tok::comment)) + return CurrentToken; + + Start = CurrentToken->getLocation(); + } + + return std::nullopt; } bool rangeContainsExpansionsOrDirectives(SourceRange Range, @@ -91,7 +96,7 @@ assert(Range.isValid() && "Invalid Range for relexing provided"); SourceLocation Loc = Range.getBegin(); - while (Loc < Range.getEnd()) { + while (Loc <= Range.getEnd()) { if (Loc.isMacroID()) return true; @@ -103,7 +108,7 @@ if (Tok->is(tok::hash)) return true; - Loc = Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts).getLocWithOffset(1); + Loc = Tok->getLocation(); } return false;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits