summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2014-07-16 14:30:19 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2014-07-16 14:30:19 +0000
commitebab1500e0a0bb6df3510e6d9e3d45f7295704ab (patch)
tree1846c4efc83f58ae8aca0d194f781cc2cc780b60 /clang-tools-extra/test/clang-tidy
parent2252cbf4e89d76b1c39da89b01d67b3e2b73154b (diff)
downloadbcm5719-llvm-ebab1500e0a0bb6df3510e6d9e3d45f7295704ab.tar.gz
bcm5719-llvm-ebab1500e0a0bb6df3510e6d9e3d45f7295704ab.zip
[clang-tidy] Add a checker for zero-length memset.
If there's memset(x, y, 0) in the code it's most likely a mistake. The checker suggests a fix-it to swap 'y' and '0'. I think this has the potential to be promoted into a general clang warning after some testing in clang-tidy. Differential Revision: http://reviews.llvm.org/D4535 llvm-svn: 213155
Diffstat (limited to 'clang-tools-extra/test/clang-tidy')
-rw-r--r--clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp b/clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp
new file mode 100644
index 00000000000..262eb51d625
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp
@@ -0,0 +1,51 @@
+// RUN: $(dirname %s)/check_clang_tidy_fix.sh %s google-runtime-memset %t
+// REQUIRES: shell
+
+void *memset(void *, int, __SIZE_TYPE__);
+
+namespace std {
+ using ::memset;
+}
+
+template <int i>
+void memtmpl() {
+ memset(0, sizeof(int), i);
+ memset(0, sizeof(int), 0);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: memset(0, 0, sizeof(int));
+}
+
+void foo(void *a, int xsize, int ysize) {
+ memset(a, sizeof(int), 0);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: memset(a, 0, sizeof(int));
+#define M memset(a, sizeof(int), 0);
+ M
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: #define M memset(a, sizeof(int), 0);
+ ::memset(a, xsize *
+ ysize, 0);
+// CHECK-MESSAGES: :[[@LINE-2]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: ::memset(a, 0, xsize *
+// CHECK-FIXES-NEXT: ysize);
+ std::memset(a, sizeof(int), 0x00);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: std::memset(a, 0x00, sizeof(int));
+
+ const int v = 0;
+ memset(a, sizeof(int), v);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: memset(a, v, sizeof(int));
+
+ memset(a, sizeof(int), v + v);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero, potentially swapped argument
+// CHECK-FIXES: memset(a, v + v, sizeof(int));
+
+ memset(a, sizeof(int), v + 1);
+
+ memset(a, -1, sizeof(int));
+ memset(a, 0xcd, 1);
+ memset(a, v, 0);
+
+ memtmpl<0>();
+}
OpenPOWER on IntegriCloud