Bug 1475882 - Enable clang-tidy's misc-macro-repeated-side-effects check. r?andi draft
authorChris Peterson <cpeterson@mozilla.com>
Mon, 09 Jul 2018 10:14:40 -0700
changeset 819046 76df1c9bf67708141cc03effe9be5d24fa492d1a
parent 819045 ae9282d1a7859b0be8af0e194536a1f7e5766da3
child 819047 6d4e44b524c7d2f883076968877886a623f1e058
push id116421
push usercpeterson@mozilla.com
push dateTue, 17 Jul 2018 01:36:52 +0000
reviewersandi
bugs1475882
milestone63.0a1
Bug 1475882 - Enable clang-tidy's misc-macro-repeated-side-effects check. r?andi This check finds side effects from repeated macro arguments: https://clang.llvm.org/extra/clang-tidy/checks/bugprone-macro-repeated-side-effects.html There are currently 16 misc-macro-repeated-side-effects warnings in mozilla-central, but they are all in third-party gfx/cairo code: gfx/cairo/cairo/src/cairo-tor-scan-converter.c:1432:10: warning: side effects in the 1st macro argument 'x' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1011:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1037:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1062:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1088:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1107:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1126:27: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1194:21: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:1258:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:600:28: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:629:28: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:660:28: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:690:28: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:721:28: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-access.c:986:16: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion gfx/cairo/libpixman/src/pixman-edge-imp.h:126:20: warning: side effects in the 2nd macro argument 'ptr' are repeated in macro expansion MozReview-Commit-ID: CQ6iO9JO773
tools/clang-tidy/config.yaml
tools/clang-tidy/test/misc-macro-repeated-side-effects.cpp
tools/clang-tidy/test/misc-macro-repeated-side-effects.json
--- a/tools/clang-tidy/config.yaml
+++ b/tools/clang-tidy/config.yaml
@@ -47,16 +47,18 @@ clang_checkers:
   - name: misc-assert-side-effect
     publish: !!bool yes
   - name: misc-bool-pointer-implicit-conversion
     publish: !!bool yes
   - name: misc-forward-declaration-namespace
     # Name with clang tidy 6.0. We are currently using 5.0
     # - name: bugprone-forward-declaration-namespace
     publish: !!bool yes
+  - name: misc-macro-repeated-side-effects
+    publish: !!bool yes
   - name: misc-suspicious-missing-comma
     publish: !!bool yes
   - name: misc-suspicious-semicolon
     publish: !!bool yes
   - name: misc-unused-using-decls
     publish: !!bool yes
   - name: modernize-avoid-bind
     publish: !!bool yes
new file mode 100644
--- /dev/null
+++ b/tools/clang-tidy/test/misc-macro-repeated-side-effects.cpp
@@ -0,0 +1,28 @@
+// https://clang.llvm.org/extra/clang-tidy/checks/bugprone-macro-repeated-side-effects.html
+
+#define MACRO_WITHOUT_REPEATED_ARG(x) (x)
+#define MACRO_WITH_REPEATED_ARG(x) ((x) + (x))
+
+static int g;
+
+int function_with_side_effects(int i)
+{
+  g += i;
+  return g;
+}
+
+void test()
+{
+  int i;
+  i = MACRO_WITHOUT_REPEATED_ARG(1); // OK
+  i = MACRO_WITH_REPEATED_ARG(1); // OK
+
+  i = MACRO_WITHOUT_REPEATED_ARG(i); // OK
+  i = MACRO_WITH_REPEATED_ARG(i); // OK
+
+  i = MACRO_WITHOUT_REPEATED_ARG(function_with_side_effects(i)); // OK
+  i = MACRO_WITH_REPEATED_ARG(function_with_side_effects(i)); // NO WARNING
+
+  i = MACRO_WITHOUT_REPEATED_ARG(i++); // OK
+  i = MACRO_WITH_REPEATED_ARG(i++); // WARNING
+}
new file mode 100644
--- /dev/null
+++ b/tools/clang-tidy/test/misc-macro-repeated-side-effects.json
@@ -0,0 +1,1 @@
+"[[\"warning\", \"side effects in the 1st macro argument 'x' are repeated in macro expansion\", \"misc-macro-repeated-side-effects\"]]"
\ No newline at end of file