Author: danielmarjamaki Date: Mon Jun 29 07:18:11 2015 New Revision: 240938
URL: http://llvm.org/viewvc/llvm-project?rev=240938&view=rev Log: [clang-tidy] Fix false positives in the macro parentheses checker Summary: There were false positives in C++ code where macro argument was a type. Reviewers: alexfh Differential Revision: http://reviews.llvm.org/D10801 Modified: clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp Modified: clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp?rev=240938&r1=240937&r2=240938&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp Mon Jun 29 07:18:11 2015 @@ -59,8 +59,8 @@ bool isKeyword(const Token &T) { /// Warning is written when one of these operators are not within parentheses. bool isWarnOp(const Token &T) { - /// \TODO This is an initial list of operators. It can be tweaked later to - /// get more positives or perhaps avoid some false positive. + /// \TODO This is an initial list of operators. It can be tweaked later to + /// get more positives or perhaps avoid some false positive. return T.isOneOf(tok::plus, tok::minus, tok::star, tok::slash, tok::percent, tok::amp, tok::pipe, tok::caret); } @@ -151,6 +151,10 @@ void MacroParenthesesPPCallbacks::argume if (Prev.isOneOf(tok::period, tok::arrow, tok::coloncolon)) continue; + // Argument is a namespace or class. + if (Next.is(tok::coloncolon)) + continue; + // String concatenation. if (isStringLiteral(Prev.getKind()) || isStringLiteral(Next.getKind())) continue; @@ -173,6 +177,11 @@ void MacroParenthesesPPCallbacks::argume if (Prev.isOneOf(tok::equal, tok::kw_return) && Next.is(tok::semi)) continue; + // C++ template parameters. + if (PP->getLangOpts().CPlusPlus && Prev.isOneOf(tok::comma, tok::less) && + Next.isOneOf(tok::comma, tok::greater)) + continue; + Check->diag(Tok.getLocation(), "macro argument should be enclosed in " "parentheses") << FixItHint::CreateInsertion(Tok.getLocation(), "(") Modified: clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp?rev=240938&r1=240937&r2=240938&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp Mon Jun 29 07:18:11 2015 @@ -32,6 +32,9 @@ #define GOOD20 void* #define GOOD21(a) case Fred::a: #define GOOD22(a) if (verbose) return a; +#define GOOD23(type) (type::Field) +#define GOOD24(t) std::set<t> s +#define GOOD25(t) std::set<t,t,t> s // These are allowed for now.. #define MAYBE1 *12.34 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits