From: Douglas Gregor Date: Tue, 3 May 2011 18:11:37 +0000 (+0000) Subject: Only check the use of memset() if we're refering to a C function named X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e452c78072156c14cd9998733e3b4b28b6fc7fd7;p=clang Only check the use of memset() if we're refering to a C function named 'memset' with external linkage. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130770 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index dcfb7cc521..ee1a924e5a 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/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/test/SemaCXX/warn-non-pod-memset.cpp b/test/SemaCXX/warn-non-pod-memset.cpp index fbdceadae2..9023793bd5 100644 --- a/test/SemaCXX/warn-non-pod-memset.cpp +++ b/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); + } +}