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
--- 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