diff options
-rw-r--r-- | lib/Sema/SemaChecking.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/warn-non-pod-memset.cpp | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 6b219612d1..7ee0eac370 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -1810,7 +1810,7 @@ void Sema::CheckMemsetArguments(const CallExpr *Call) { QualType DestTy = Dest->getType(); if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) { QualType PointeeTy = DestPtrTy->getPointeeType(); - if (!PointeeTy->isPODType()) { + if (!PointeeTy->isPODType() && !PointeeTy->isVoidType()) { DiagRuntimeBehavior( Dest->getExprLoc(), Dest, PDiag(diag::warn_non_pod_memset) diff --git a/test/SemaCXX/warn-non-pod-memset.cpp b/test/SemaCXX/warn-non-pod-memset.cpp index 03e626e708..97bbdc27cc 100644 --- a/test/SemaCXX/warn-non-pod-memset.cpp +++ b/test/SemaCXX/warn-non-pod-memset.cpp @@ -32,7 +32,16 @@ void test_warn() { // expected-note {{explicitly cast the pointer to silence this warning}} } -void test_nowarn() { +void test_nowarn(void *void_ptr) { + int i, *iptr; + float y; + char c; + + memset(&i, 0, sizeof i); + memset(&iptr, 0, sizeof iptr); + memset(&y, 0, sizeof y); + memset(&c, 0, sizeof c); + memset(void_ptr, 0, 42); memset(&s1, 0, sizeof s1); memset(&s2, 0, sizeof s2); memset(&s3, 0, sizeof s3); |