Author: rtrieu Date: Mon Dec 5 19:42:28 2016 New Revision: 288756 URL: http://llvm.org/viewvc/llvm-project?rev=288756&view=rev Log: Clean up some Sema checking code. NFC
- Rename CheckMinZero to CheckMaxUnsignedZero to reflect its actual purpose. - Remove unused parameters from CheckAbsoluteValueFunction and CheckMaxUnsignedZero functions. - Refactor the function name check so both functions can use the same one. Modified: cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/Sema/SemaChecking.cpp Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=288756&r1=288755&r2=288756&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Mon Dec 5 19:42:28 2016 @@ -9795,11 +9795,9 @@ private: llvm::SmallBitVector &CheckedVarArgs); void CheckAbsoluteValueFunction(const CallExpr *Call, - const FunctionDecl *FDecl, - IdentifierInfo *FnInfo); + const FunctionDecl *FDecl); - void CheckMinZero(const CallExpr *Call, const FunctionDecl *FDecl, - IdentifierInfo *FnInfo); + void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl); void CheckMemaccessArguments(const CallExpr *Call, unsigned BId, Modified: cfe/trunk/lib/Sema/SemaChecking.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=288756&r1=288755&r2=288756&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) +++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Dec 5 19:42:28 2016 @@ -2517,8 +2517,8 @@ bool Sema::CheckFunctionCall(FunctionDec if (!FnInfo) return false; - CheckAbsoluteValueFunction(TheCall, FDecl, FnInfo); - CheckMinZero(TheCall, FDecl, FnInfo); + CheckAbsoluteValueFunction(TheCall, FDecl); + CheckMaxUnsignedZero(TheCall, FDecl); if (getLangOpts().ObjC1) DiagnoseCStringFormatDirectiveInCFAPI(*this, FDecl, Args, NumArgs); @@ -6666,23 +6666,14 @@ static void emitReplacement(Sema &S, Sou << FunctionName; } -static bool IsFunctionStdAbs(const FunctionDecl *FDecl) { +template <std::size_t StrLen> +static bool IsStdFunction(const FunctionDecl *FDecl, + const char (&Str)[StrLen]) { if (!FDecl) return false; - - if (!FDecl->getIdentifier() || !FDecl->getIdentifier()->isStr("abs")) + if (!FDecl->getIdentifier() || !FDecl->getIdentifier()->isStr(Str)) return false; - - const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(FDecl->getDeclContext()); - - while (ND && ND->isInlineNamespace()) { - ND = dyn_cast<NamespaceDecl>(ND->getDeclContext()); - } - - if (!ND || !ND->getIdentifier() || !ND->getIdentifier()->isStr("std")) - return false; - - if (!isa<TranslationUnitDecl>(ND->getDeclContext())) + if (!FDecl->isInStdNamespace()) return false; return true; @@ -6690,13 +6681,12 @@ static bool IsFunctionStdAbs(const Funct // Warn when using the wrong abs() function. void Sema::CheckAbsoluteValueFunction(const CallExpr *Call, - const FunctionDecl *FDecl, - IdentifierInfo *FnInfo) { + const FunctionDecl *FDecl) { if (Call->getNumArgs() != 1) return; unsigned AbsKind = getAbsoluteValueFunctionKind(FDecl); - bool IsStdAbs = IsFunctionStdAbs(FDecl); + bool IsStdAbs = IsStdFunction(FDecl, "abs"); if (AbsKind == 0 && !IsStdAbs) return; @@ -6770,30 +6760,8 @@ void Sema::CheckAbsoluteValueFunction(co } //===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===// -static bool IsFunctionStdMax(const FunctionDecl *FDecl) { - if (!FDecl) - return false; - - if (!FDecl->getIdentifier() || !FDecl->getIdentifier()->isStr("max")) - return false; - - const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(FDecl->getDeclContext()); - - while (ND && ND->isInlineNamespace()) { - ND = dyn_cast<NamespaceDecl>(ND->getDeclContext()); - } - - if (!ND || !ND->getIdentifier() || !ND->getIdentifier()->isStr("std")) - return false; - - if (!isa<TranslationUnitDecl>(ND->getDeclContext())) - return false; - - return true; -} - -void Sema::CheckMinZero(const CallExpr *Call, const FunctionDecl *FDecl, - IdentifierInfo *FnInfo) { +void Sema::CheckMaxUnsignedZero(const CallExpr *Call, + const FunctionDecl *FDecl) { if (!Call || !FDecl) return; // Ignore template specializations and macros. @@ -6802,7 +6770,7 @@ void Sema::CheckMinZero(const CallExpr * // Only care about the one template argument, two function parameter std::max if (Call->getNumArgs() != 2) return; - if (!IsFunctionStdMax(FDecl)) return; + if (!IsStdFunction(FDecl, "max")) return; const auto * ArgList = FDecl->getTemplateSpecializationArgs(); if (!ArgList) return; if (ArgList->size() != 1) return; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits