diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-05-03 18:11:37 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-05-03 18:11:37 +0000 |
| commit | 953beb47154829aa9ef9dfe3c66a5d0c4286e37f (patch) | |
| tree | bdf396098609a9a2bbd3bb4071a7b6aab32b66dd | |
| parent | c5242b0e784ebe62799215ee2294aafe9863c3a2 (diff) | |
| download | llvm-953beb47154829aa9ef9dfe3c66a5d0c4286e37f.zip llvm-953beb47154829aa9ef9dfe3c66a5d0c4286e37f.tar.gz llvm-953beb47154829aa9ef9dfe3c66a5d0c4286e37f.tar.bz2 | |
Only check the use of memset() if we're refering to a C function named
'memset' with external linkage.
llvm-svn: 130770
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 4 | ||||
| -rw-r--r-- | clang/test/SemaCXX/warn-non-pod-memset.cpp | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index dcfb7cc..ee1a924 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -319,7 +319,9 @@ bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall) { } // Memset handling - if (FnInfo->isStr("memset")) + if (FnInfo->isStr("memset") && + FDecl->getLinkage() == ExternalLinkage && + (!getLangOptions().CPlusPlus || FDecl->isExternC())) CheckMemsetArguments(TheCall); return false; diff --git a/clang/test/SemaCXX/warn-non-pod-memset.cpp b/clang/test/SemaCXX/warn-non-pod-memset.cpp index fbdcead..9023793 100644 --- a/clang/test/SemaCXX/warn-non-pod-memset.cpp +++ b/clang/test/SemaCXX/warn-non-pod-memset.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -fsyntax-only -Wnon-pod-memset -verify %s -extern void *memset(void *, int, unsigned); +extern "C" void *memset(void *, int, unsigned); // Several POD types that should not warn. struct S1 {} s1; @@ -61,3 +61,10 @@ void test_nowarn(void *void_ptr) { // Dead code shouldn't warn. if (false) memset(&x1, 0, sizeof x1); } + +namespace N { + void *memset(void *, int, unsigned); + void test_nowarn() { + N::memset(&x1, 0, sizeof x1); + } +} |
