diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-07-16 14:30:19 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-07-16 14:30:19 +0000 |
commit | ebab1500e0a0bb6df3510e6d9e3d45f7295704ab (patch) | |
tree | 1846c4efc83f58ae8aca0d194f781cc2cc780b60 /clang-tools-extra/test/clang-tidy | |
parent | 2252cbf4e89d76b1c39da89b01d67b3e2b73154b (diff) | |
download | bcm5719-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.cpp | 51 |
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>(); +} |