[clang-tidy] As a simple heuristic don't emit a swap fixit that would create
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 16 Jul 2014 14:52:07 +0000 (14:52 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 16 Jul 2014 14:52:07 +0000 (14:52 +0000)
negative-sized memsets.

memset(x, -1, 0) is still useless but swapping makes no sense here. Just emit
a warning.

llvm-svn: 213157

clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp

index 98c6246..b9b776e 100644 (file)
@@ -63,7 +63,8 @@ void MemsetZeroLengthCheck::check(const MatchFinder::MatchResult &Result) {
     return;
 
   // If both arguments evaluate to zero emit a warning without fix suggestions.
-  if (Arg1->EvaluateAsInt(Value1, *Result.Context) && Value1 == 0) {
+  if (Arg1->EvaluateAsInt(Value1, *Result.Context) &&
+      (Value1 == 0 || Value1.isNegative())) {
     diag(Call->getLocStart(), "memset of size zero");
     return;
   }
index 5b23271..b5393bd 100644 (file)
@@ -49,5 +49,9 @@ void foo(void *a, int xsize, int ysize) {
 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero
 // CHECK-FIXES: memset(a, v, 0);
 
+  memset(a, -1, v);
+// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: memset of size zero
+// CHECK-FIXES: memset(a, -1, v);
+
   memtmpl<0>();
 }