[PATCH] clang-tidy: check for repeated side effects in macro
    Alexander Kornienko 
    alexfh at google.com
       
    Mon Jun 15 05:36:55 PDT 2015
    
    
  
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:54
@@ +53,3 @@
+    int SkipParenCount = 0;
+    for (const auto &T : MI->tokens()) {
+      // Bail out if the contents of the macro is containing keywords that are
----------------
I find it hard to read this function due to many nested control statements. Let's split this loop in two separate checks: 
  if (std::find_if(MI->tokens().begin(), MI->tokens().end(), [] (const Token &T) { return T.isOneOf(...);}) != MI->tokens.end())
    return;
and
  if (CountArgumentExpansions(Arg /* or ResultArgToks */, MI->tokens()) < 2)
    continue;
And move most of it to a new `CountArgumentExpansions` function (if you have a better name, feel free to use it).
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:56
@@ +55,3 @@
+      // Bail out if the contents of the macro is containing keywords that are
+      // making the macro to complex.
+      if (T.isOneOf(tok::question, tok::kw_if, tok::kw_else, tok::kw_switch,
----------------
nit: "content ... is" or "contents ... are"
Also, s/to complex/too complex/.
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:62
@@ +61,3 @@
+        return;
+      // Skip the whole parenthesis that is starting at the current position. If
+      // none is starting, then do not skip anything.
----------------
nit: It's more correct to use plural here: "parentheses starting at the current position."
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:75
@@ +74,3 @@
+      // If not existent, skip it.
+      if (TII == NULL)
+        continue;
----------------
s/NULL/nullptr/
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:113
@@ +112,3 @@
+
+      if (AT.is(tok::plusplus) || AT.is(tok::minusminus)) {
+        Check.diag(ResultArgToks->getLocation(),
----------------
Please use `isOneOf`.
================
Comment at: clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp:117
@@ +116,3 @@
+                   "repeated in macro expansion")
+            << (MI->getArgumentNum(Arg) + 1) << Arg->getName();
+        Check.diag(MI->getDefinitionLoc(), "macro %0 defined here",
----------------
Looks like you're calling `MI->getArgumentNum(Arg)` twice. Maybe store the result?
http://reviews.llvm.org/D9496
EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
    
    
More information about the cfe-commits
mailing list