r337706 - [Sema] Don't emit -Wmemset-transposed-args for memset(p, 0, 0)
Erik Pilkington via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 23 09:24:14 PDT 2018
Author: epilk
Date: Mon Jul 23 09:24:14 2018
New Revision: 337706
URL: http://llvm.org/viewvc/llvm-project?rev=337706&view=rev
Log:
[Sema] Don't emit -Wmemset-transposed-args for memset(p,0,0)
Thanks to Arthur O'Dwyer for the suggestion!
Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp
cfe/trunk/test/Sema/transpose-memset.c
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=337706&r1=337705&r2=337706&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Jul 23 09:24:14 2018
@@ -8788,11 +8788,14 @@ static void CheckMemaccessSize(Sema &S,
const Expr *SizeArg =
Call->getArg(BId == Builtin::BImemset ? 2 : 1)->IgnoreImpCasts();
+ auto isLiteralZero = [](const Expr *E) {
+ return isa<IntegerLiteral>(E) && cast<IntegerLiteral>(E)->getValue() == 0;
+ };
+
// If we're memsetting or bzeroing 0 bytes, then this is likely an error.
SourceLocation CallLoc = Call->getRParenLoc();
SourceManager &SM = S.getSourceManager();
- if (isa<IntegerLiteral>(SizeArg) &&
- cast<IntegerLiteral>(SizeArg)->getValue() == 0 &&
+ if (isLiteralZero(SizeArg) &&
!isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {
SourceLocation DiagLoc = SizeArg->getExprLoc();
@@ -8804,7 +8807,7 @@ static void CheckMemaccessSize(Sema &S,
CallLoc, SM, S.getLangOpts()) == "bzero")) {
S.Diag(DiagLoc, diag::warn_suspicious_bzero_size);
S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);
- } else {
+ } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {
S.Diag(DiagLoc, diag::warn_suspicious_sizeof_memset) << 0;
S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;
}
Modified: cfe/trunk/test/Sema/transpose-memset.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/transpose-memset.c?rev=337706&r1=337705&r2=337706&view=diff
==============================================================================
--- cfe/trunk/test/Sema/transpose-memset.c (original)
+++ cfe/trunk/test/Sema/transpose-memset.c Mon Jul 23 09:24:14 2018
@@ -22,6 +22,7 @@ int main() {
memset(array, (int)sizeof(array), (0)); // no warning
memset(array, (int)sizeof(array), 32); // no warning
memset(array, 32, (0)); // no warning
+ memset(array, 0, 0); // no warning
bzero(ptr, 0); // expected-warning{{'size' argument to bzero is '0'}} expected-note{{parenthesize the second argument to silence}}
real_bzero(ptr, 0); // expected-warning{{'size' argument to bzero is '0'}} expected-note{{parenthesize the second argument to silence}}
@@ -55,6 +56,6 @@ void macros() {
__builtin_memset(array, 0, ZERO); // no warning
__builtin_bzero(array, ZERO);
- __builtin_memset(array, 0, 0); // expected-warning{{'size' argument to memset}} // expected-note{{parenthesize}}
+ __builtin_memset(array, 1, 0); // expected-warning{{'size' argument to memset}} // expected-note{{parenthesize}}
__builtin_bzero(array, 0); // expected-warning{{'size' argument to bzero}} // expected-note{{parenthesize}}
}
More information about the cfe-commits
mailing list