From 806bcabcdafbb1deb8e3f1821d848f33f67a8dd5 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Wed, 16 Jul 2014 14:52:07 +0000 Subject: [PATCH] [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 --- clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp | 3 ++- clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp b/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp index 98c6246..b9b776e 100644 --- a/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp +++ b/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp @@ -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; } 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 index 5b23271..b5393bd 100644 --- a/clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp +++ b/clang-tools-extra/test/clang-tidy/google-memset-zero-length.cpp @@ -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>(); } -- 2.7.4