summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2014-07-16 14:42:43 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2014-07-16 14:42:43 +0000
commitd6a499077a2ec818af8657b3376de987d0b51e22 (patch)
tree62d7755e7132a2882d8bc7dd66a59a1a9e2b9ca9 /clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
parentebab1500e0a0bb6df3510e6d9e3d45f7295704ab (diff)
downloadbcm5719-llvm-d6a499077a2ec818af8657b3376de987d0b51e22.tar.gz
bcm5719-llvm-d6a499077a2ec818af8657b3376de987d0b51e22.zip
[clang-tidy] Also emit a warning for memset(x, 0, 0)
It doesn't make sense to suggest swapping the arguments here but it's still useless code llvm-svn: 213156
Diffstat (limited to 'clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp b/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
index 218a2370632..98c6246b836 100644
--- a/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/MemsetZeroLengthCheck.cpp
@@ -57,13 +57,17 @@ void MemsetZeroLengthCheck::check(const MatchFinder::MatchResult &Result) {
const Expr *Arg2 = Call->getArg(2);
// Try to evaluate the second argument so we can also find values that are not
- // just literals. We don't emit a warning if the second argument also
- // evaluates to zero.
+ // just literals.
llvm::APSInt Value1, Value2;
- if (!Arg2->EvaluateAsInt(Value2, *Result.Context) || Value2 != 0 ||
- (Arg1->EvaluateAsInt(Value1, *Result.Context) && Value1 == 0))
+ if (!Arg2->EvaluateAsInt(Value2, *Result.Context) || Value2 != 0)
return;
+ // If both arguments evaluate to zero emit a warning without fix suggestions.
+ if (Arg1->EvaluateAsInt(Value1, *Result.Context) && Value1 == 0) {
+ diag(Call->getLocStart(), "memset of size zero");
+ return;
+ }
+
// Emit a warning and fix-its to swap the arguments.
auto D = diag(Call->getLocStart(),
"memset of size zero, potentially swapped arguments");
OpenPOWER on IntegriCloud