[clang-tidy] As a simple heuristic don't emit a swap fixit that would create
negative-sized memsets.
memset(x, -1, 0) is still useless but swapping makes no sense here. Just emit
a warning.
llvm-svn: 213157
GitOrigin-RevId: 806bcabcdafbb1deb8e3f1821d848f33f67a8dd5
diff --git a/clang-tidy/google/MemsetZeroLengthCheck.cpp b/clang-tidy/google/MemsetZeroLengthCheck.cpp
index 98c6246..b9b776e 100644
--- a/clang-tidy/google/MemsetZeroLengthCheck.cpp
+++ b/clang-tidy/google/MemsetZeroLengthCheck.cpp
@@ -63,7 +63,8 @@
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;
}
diff --git a/test/clang-tidy/google-memset-zero-length.cpp b/test/clang-tidy/google-memset-zero-length.cpp
index 5b23271..b5393bd 100644
--- a/test/clang-tidy/google-memset-zero-length.cpp
+++ b/test/clang-tidy/google-memset-zero-length.cpp
@@ -49,5 +49,9 @@
// 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>();
}