REPOSITORY
rL LLVM
http://reviews.llvm.org/D10801
Files:
clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
Index: clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
===================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
+++ clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
@@ -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
Index: clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
===================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
+++ clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
@@ -59,8 +59,8 @@
/// 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 @@
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 @@
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(), "(")
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
Index: clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
===================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
+++ clang-tools-extra/trunk/test/clang-tidy/misc-macro-parentheses.cpp
@@ -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
Index: clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
===================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
+++ clang-tools-extra/trunk/clang-tidy/misc/MacroParenthesesCheck.cpp
@@ -59,8 +59,8 @@
/// 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 @@
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 @@
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(), "(")
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits