Author: alexfh Date: Mon May 22 08:58:16 2017 New Revision: 303551 URL: http://llvm.org/viewvc/llvm-project?rev=303551&view=rev Log: [clang-tidy] readability-braces-around-statements false positive with char literals
Summary: Single-line if statements cause a false positive when the last token in the conditional statement is a char constant: ``` if (condition) return 'a'; ``` For some reason `findEndLocation` seems to skips too many (vertical) whitespaces in this case. The same problem already occured with string literals (https://reviews.llvm.org/D25558), and was fixed by adding a special check for this very case. I just extended the condition to also include char constants. No idea what really causes the issue though. Reviewers: alexfh Reviewed By: alexfh Subscribers: xazax.hun, cfe-commits Patch by Florian Gross! Differential Revision: https://reviews.llvm.org/D33354 Modified: clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp?rev=303551&r1=303550&r2=303551&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp Mon May 22 08:58:16 2017 @@ -54,14 +54,15 @@ SourceLocation forwardSkipWhitespaceAndC SourceLocation findEndLocation(SourceLocation LastTokenLoc, const SourceManager &SM, const ASTContext *Context) { - SourceLocation Loc = LastTokenLoc; + SourceLocation Loc = + Lexer::GetBeginningOfToken(LastTokenLoc, SM, Context->getLangOpts()); // Loc points to the beginning of the last (non-comment non-ws) token // before end or ';'. assert(Loc.isValid()); bool SkipEndWhitespaceAndComments = true; tok::TokenKind TokKind = getTokenKind(Loc, SM, Context); if (TokKind == tok::NUM_TOKENS || TokKind == tok::semi || - TokKind == tok::r_brace || isStringLiteral(TokKind)) { + TokKind == tok::r_brace) { // If we are at ";" or "}", we found the last token. We could use as well // `if (isa<NullStmt>(S))`, but it wouldn't work for nested statements. SkipEndWhitespaceAndComments = false; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits