diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-bad-memaccess.cpp | 6 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-memset-bad-sizeof.cpp | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index d684928e510..abcccbaf18f 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -4788,6 +4788,8 @@ void Sema::CheckMemaccessArguments(const CallExpr *Call, break; } } + } else if (DestTy->isArrayType()) { + PointeeTy = DestTy; } if (PointeeTy == QualType()) diff --git a/clang/test/SemaCXX/warn-bad-memaccess.cpp b/clang/test/SemaCXX/warn-bad-memaccess.cpp index e86610ab64d..67cde10bf45 100644 --- a/clang/test/SemaCXX/warn-bad-memaccess.cpp +++ b/clang/test/SemaCXX/warn-bad-memaccess.cpp @@ -21,7 +21,7 @@ public: void foo() {} } c1; -struct X1 { virtual void f(); } x1; +struct X1 { virtual void f(); } x1, x1arr[2]; struct X2 : virtual S1 {} x2; struct ContainsDynamic { X1 dynamic; } contains_dynamic; @@ -33,6 +33,10 @@ void test_warn() { memset(&x1, 0, sizeof x1); // \ // expected-warning {{destination for this 'memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} + memset(x1arr, 0, sizeof x1arr); // \ + // expected-warning {{destination for this 'memset' call is a pointer to dynamic class}} \ + // expected-note {{explicitly cast the pointer to silence this warning}} + memset((void*)x1arr, 0, sizeof x1arr); memset(&x2, 0, sizeof x2); // \ // expected-warning {{destination for this 'memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} diff --git a/clang/test/SemaCXX/warn-memset-bad-sizeof.cpp b/clang/test/SemaCXX/warn-memset-bad-sizeof.cpp index e388634e884..cca15fc8ef3 100644 --- a/clang/test/SemaCXX/warn-memset-bad-sizeof.cpp +++ b/clang/test/SemaCXX/warn-memset-bad-sizeof.cpp @@ -95,9 +95,11 @@ void f(Mat m, const Foo& const_foo, char *buffer) { int iarr[14]; memset(&iarr[0], 0, sizeof iarr); + memset(iarr, 0, sizeof iarr); int* iparr[14]; memset(&iparr[0], 0, sizeof iparr); + memset(iparr, 0, sizeof iparr); memset(m, 0, sizeof(Mat)); |