diff --git a/clang-tools-extra/clang-tidy/abseil/RedundantStrcatCallsCheck.cpp b/clang-tools-extra/clang-tidy/abseil/RedundantStrcatCallsCheck.cpp index d7cc0cacab6ea..a58c0410c4e35 100644 --- a/clang-tools-extra/clang-tidy/abseil/RedundantStrcatCallsCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/RedundantStrcatCallsCheck.cpp @@ -45,7 +45,10 @@ struct StrCatCheckResult { std::vector Hints; }; -void removeCallLeaveArgs(const CallExpr *Call, StrCatCheckResult *CheckResult) { +} // namespace + +static void removeCallLeaveArgs(const CallExpr *Call, + StrCatCheckResult *CheckResult) { if (Call->getNumArgs() == 0) return; // Remove 'Foo(' @@ -58,9 +61,9 @@ void removeCallLeaveArgs(const CallExpr *Call, StrCatCheckResult *CheckResult) { Call->getRParenLoc(), Call->getEndLoc().getLocWithOffset(1)))); } -const clang::CallExpr *processArgument(const Expr *Arg, - const MatchFinder::MatchResult &Result, - StrCatCheckResult *CheckResult) { +static const clang::CallExpr * +processArgument(const Expr *Arg, const MatchFinder::MatchResult &Result, + StrCatCheckResult *CheckResult) { const auto IsAlphanum = hasDeclaration(cxxMethodDecl(hasName("AlphaNum"))); static const auto *const Strcat = new auto(hasName("::absl::StrCat")); const auto IsStrcat = cxxBindTemporaryExpr( @@ -78,8 +81,8 @@ const clang::CallExpr *processArgument(const Expr *Arg, return nullptr; } -StrCatCheckResult processCall(const CallExpr *RootCall, bool IsAppend, - const MatchFinder::MatchResult &Result) { +static StrCatCheckResult processCall(const CallExpr *RootCall, bool IsAppend, + const MatchFinder::MatchResult &Result) { StrCatCheckResult CheckResult; std::deque CallsToProcess = {RootCall}; @@ -101,7 +104,6 @@ StrCatCheckResult processCall(const CallExpr *RootCall, bool IsAppend, } return CheckResult; } -} // namespace void RedundantStrcatCallsCheck::check(const MatchFinder::MatchResult &Result) { bool IsAppend = false; diff --git a/clang-tools-extra/clang-tidy/bugprone/MultipleStatementMacroCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MultipleStatementMacroCheck.cpp index 390f3dd472a5b..54ed8994d0352 100644 --- a/clang-tools-extra/clang-tidy/bugprone/MultipleStatementMacroCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/MultipleStatementMacroCheck.cpp @@ -18,8 +18,11 @@ namespace { AST_MATCHER(Expr, isInMacro) { return Node.getBeginLoc().isMacroID(); } +} // namespace + /// Find the next statement after `S`. -const Stmt *nextStmt(const MatchFinder::MatchResult &Result, const Stmt *S) { +static const Stmt *nextStmt(const MatchFinder::MatchResult &Result, + const Stmt *S) { auto Parents = Result.Context->getParents(*S); if (Parents.empty()) return nullptr; @@ -40,8 +43,8 @@ using ExpansionRanges = std::vector; /// \brief Get all the macro expansion ranges related to `Loc`. /// /// The result is ordered from most inner to most outer. -ExpansionRanges getExpansionRanges(SourceLocation Loc, - const MatchFinder::MatchResult &Result) { +static ExpansionRanges +getExpansionRanges(SourceLocation Loc, const MatchFinder::MatchResult &Result) { ExpansionRanges Locs; while (Loc.isMacroID()) { Locs.push_back( @@ -51,8 +54,6 @@ ExpansionRanges getExpansionRanges(SourceLocation Loc, return Locs; } -} // namespace - void MultipleStatementMacroCheck::registerMatchers(MatchFinder *Finder) { const auto Inner = expr(isInMacro(), unless(compoundStmt())).bind("inner"); Finder->addMatcher( diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp index 37d737afc19e8..1ac9b8bbdfedb 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp @@ -28,10 +28,13 @@ AST_MATCHER(CXXRecordDecl, hasDefaultConstructor) { return Node.hasDefaultConstructor(); } +} // namespace + // Iterate over all the fields in a record type, both direct and indirect (e.g. // if the record contains an anonymous struct). template -void forEachField(const RecordDecl &Record, const T &Fields, const Func &Fn) { +static void forEachField(const RecordDecl &Record, const T &Fields, + const Func &Fn) { for (const FieldDecl *F : Fields) { if (F->isAnonymousStructOrUnion()) { if (const CXXRecordDecl *R = F->getType()->getAsCXXRecordDecl()) @@ -43,8 +46,9 @@ void forEachField(const RecordDecl &Record, const T &Fields, const Func &Fn) { } template -void forEachFieldWithFilter(const RecordDecl &Record, const T &Fields, - bool &AnyMemberHasInitPerUnion, const Func &Fn) { +static void forEachFieldWithFilter(const RecordDecl &Record, const T &Fields, + bool &AnyMemberHasInitPerUnion, + const Func &Fn) { for (const FieldDecl *F : Fields) { if (F->isAnonymousStructOrUnion()) { if (const CXXRecordDecl *R = F->getType()->getAsCXXRecordDecl()) { @@ -59,8 +63,9 @@ void forEachFieldWithFilter(const RecordDecl &Record, const T &Fields, } } -void removeFieldInitialized(const FieldDecl *M, - SmallPtrSetImpl &FieldDecls) { +static void +removeFieldInitialized(const FieldDecl *M, + SmallPtrSetImpl &FieldDecls) { const RecordDecl *R = M->getParent(); if (R && R->isUnion()) { // Erase all members in a union if any member of it is initialized. @@ -70,9 +75,9 @@ void removeFieldInitialized(const FieldDecl *M, FieldDecls.erase(M); } -void removeFieldsInitializedInBody( - const Stmt &Stmt, ASTContext &Context, - SmallPtrSetImpl &FieldDecls) { +static void +removeFieldsInitializedInBody(const Stmt &Stmt, ASTContext &Context, + SmallPtrSetImpl &FieldDecls) { auto Matches = match(findAll(binaryOperator( hasOperatorName("="), @@ -82,9 +87,9 @@ void removeFieldsInitializedInBody( removeFieldInitialized(Match.getNodeAs("fieldDecl"), FieldDecls); } -StringRef getName(const FieldDecl *Field) { return Field->getName(); } +static StringRef getName(const FieldDecl *Field) { return Field->getName(); } -StringRef getName(const RecordDecl *Record) { +static StringRef getName(const RecordDecl *Record) { // Get the typedef name if this is a C-style anonymous struct and typedef. if (const TypedefNameDecl *Typedef = Record->getTypedefNameForAnonDecl()) return Typedef->getName(); @@ -94,7 +99,7 @@ StringRef getName(const RecordDecl *Record) { // Creates comma separated list of decls requiring initialization in order of // declaration. template -std::string +static std::string toCommaSeparatedString(const R &OrderedDecls, const SmallPtrSetImpl &DeclsToInit) { SmallVector Names; @@ -105,12 +110,14 @@ toCommaSeparatedString(const R &OrderedDecls, return llvm::join(Names.begin(), Names.end(), ", "); } -SourceLocation getLocationForEndOfToken(const ASTContext &Context, - SourceLocation Location) { +static SourceLocation getLocationForEndOfToken(const ASTContext &Context, + SourceLocation Location) { return Lexer::getLocForEndOfToken(Location, 0, Context.getSourceManager(), Context.getLangOpts()); } +namespace { + // There are 3 kinds of insertion placements: enum class InitializerPlacement { // 1. The fields are inserted after an existing CXXCtorInitializer stored in @@ -187,15 +194,17 @@ struct InitializerInsertion { SmallVector Initializers; }; +} // namespace + // Convenience utility to get a RecordDecl from a QualType. -const RecordDecl *getCanonicalRecordDecl(const QualType &Type) { +static const RecordDecl *getCanonicalRecordDecl(const QualType &Type) { if (const auto *RT = Type->getAsCanonical()) return RT->getDecl(); return nullptr; } template -SmallVector +static SmallVector computeInsertions(const CXXConstructorDecl::init_const_range &Inits, const R &OrderedDecls, const SmallPtrSetImpl &DeclsToInit) { @@ -239,8 +248,9 @@ computeInsertions(const CXXConstructorDecl::init_const_range &Inits, // Gets the list of bases and members that could possibly be initialized, in // order as they appear in the class declaration. -void getInitializationsInOrder(const CXXRecordDecl &ClassDecl, - SmallVectorImpl &Decls) { +static void +getInitializationsInOrder(const CXXRecordDecl &ClassDecl, + SmallVectorImpl &Decls) { Decls.clear(); for (const auto &Base : ClassDecl.bases()) { // Decl may be null if the base class is a template parameter. @@ -253,9 +263,10 @@ void getInitializationsInOrder(const CXXRecordDecl &ClassDecl, } template -void fixInitializerList(const ASTContext &Context, DiagnosticBuilder &Diag, - const CXXConstructorDecl *Ctor, - const SmallPtrSetImpl &DeclsToInit) { +static void fixInitializerList(const ASTContext &Context, + DiagnosticBuilder &Diag, + const CXXConstructorDecl *Ctor, + const SmallPtrSetImpl &DeclsToInit) { // Do not propose fixes in macros since we cannot place them correctly. if (Ctor->getBeginLoc().isMacroID()) return; @@ -271,8 +282,6 @@ void fixInitializerList(const ASTContext &Context, DiagnosticBuilder &Diag, } } -} // anonymous namespace - ProTypeMemberInitCheck::ProTypeMemberInitCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), diff --git a/clang-tools-extra/clang-tidy/misc/CoroutineHostileRAIICheck.cpp b/clang-tools-extra/clang-tidy/misc/CoroutineHostileRAIICheck.cpp index 8ec7695aa842f..3b9b8e0daa62a 100644 --- a/clang-tools-extra/clang-tidy/misc/CoroutineHostileRAIICheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/CoroutineHostileRAIICheck.cpp @@ -60,12 +60,12 @@ AST_MATCHER_P(CoawaitExpr, awaitable, ast_matchers::internal::Matcher, return InnerMatcher.matches(*E, Finder, Builder); return false; } +} // namespace -auto typeWithNameIn(const std::vector &Names) { +static auto typeWithNameIn(const std::vector &Names) { return hasType( hasCanonicalType(hasDeclaration(namedDecl(hasAnyName(Names))))); } -} // namespace CoroutineHostileRAIICheck::CoroutineHostileRAIICheck(StringRef Name, ClangTidyContext *Context) diff --git a/clang-tools-extra/clang-tidy/misc/NoRecursionCheck.cpp b/clang-tools-extra/clang-tidy/misc/NoRecursionCheck.cpp index 0d7667ce53c0c..035598d354503 100644 --- a/clang-tools-extra/clang-tidy/misc/NoRecursionCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/NoRecursionCheck.cpp @@ -151,10 +151,12 @@ constexpr unsigned SmallSCCSize = 32; using CallStackTy = llvm::SmallVector; +} // namespace + // In given SCC, find *some* call stack that will be cyclic. // This will only find *one* such stack, it might not be the smallest one, // and there may be other loops. -CallStackTy pathfindSomeCycle(ArrayRef SCC) { +static CallStackTy pathfindSomeCycle(ArrayRef SCC) { // We'll need to be able to performantly look up whether some CallGraphNode // is in SCC or not, so cache all the SCC elements in a set. const ImmutableSmallSet SCCElts(SCC); @@ -190,8 +192,6 @@ CallStackTy pathfindSomeCycle(ArrayRef SCC) { return CallStack; } -} // namespace - void NoRecursionCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher(translationUnitDecl().bind("TUDecl"), this); } diff --git a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp index c1dc209fd079d..740a68d852c9e 100644 --- a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp @@ -55,8 +55,10 @@ struct NewSuffix { std::optional FixIt; }; -std::optional getMacroAwareLocation(SourceLocation Loc, - const SourceManager &SM) { +} // namespace + +static std::optional +getMacroAwareLocation(SourceLocation Loc, const SourceManager &SM) { // Do nothing if the provided location is invalid. if (Loc.isInvalid()) return std::nullopt; @@ -67,8 +69,8 @@ std::optional getMacroAwareLocation(SourceLocation Loc, return SpellingLoc; } -std::optional getMacroAwareSourceRange(SourceRange Loc, - const SourceManager &SM) { +static std::optional +getMacroAwareSourceRange(SourceRange Loc, const SourceManager &SM) { std::optional Begin = getMacroAwareLocation(Loc.getBegin(), SM); std::optional End = getMacroAwareLocation(Loc.getEnd(), SM); @@ -77,7 +79,7 @@ std::optional getMacroAwareSourceRange(SourceRange Loc, return SourceRange(*Begin, *End); } -std::optional +static std::optional getNewSuffix(llvm::StringRef OldSuffix, const std::vector &NewSuffixes) { // If there is no config, just uppercase the entirety of the suffix. @@ -96,7 +98,7 @@ getNewSuffix(llvm::StringRef OldSuffix, } template -std::optional +static std::optional shouldReplaceLiteralSuffix(const Expr &Literal, const std::vector &NewSuffixes, const SourceManager &SM, const LangOptions &LO) { @@ -174,8 +176,6 @@ shouldReplaceLiteralSuffix(const Expr &Literal, return ReplacementDsc; } -} // namespace - UppercaseLiteralSuffixCheck::UppercaseLiteralSuffixCheck( StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), diff --git a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp index 57453ad089a2c..a5b08836db2c8 100644 --- a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp +++ b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp @@ -19,9 +19,8 @@ namespace clang::tidy::utils::decl_ref_expr { using namespace ::clang::ast_matchers; using llvm::SmallPtrSet; -namespace { - -template bool isSetDifferenceEmpty(const S &S1, const S &S2) { +template +static bool isSetDifferenceEmpty(const S &S1, const S &S2) { for (auto E : S1) if (S2.count(E) == 0) return false; @@ -30,15 +29,15 @@ template bool isSetDifferenceEmpty(const S &S1, const S &S2) { // Extracts all Nodes keyed by ID from Matches and inserts them into Nodes. template -void extractNodesByIdTo(ArrayRef Matches, StringRef ID, - SmallPtrSet &Nodes) { +static void extractNodesByIdTo(ArrayRef Matches, StringRef ID, + SmallPtrSet &Nodes) { for (const auto &Match : Matches) Nodes.insert(Match.getNodeAs(ID)); } // Returns true if both types refer to the same type, // ignoring the const-qualifier. -bool isSameTypeIgnoringConst(QualType A, QualType B) { +static bool isSameTypeIgnoringConst(QualType A, QualType B) { A = A.getCanonicalType(); B = B.getCanonicalType(); A.addConst(); @@ -47,7 +46,8 @@ bool isSameTypeIgnoringConst(QualType A, QualType B) { } // Returns true if `D` and `O` have the same parameter types. -bool hasSameParameterTypes(const CXXMethodDecl &D, const CXXMethodDecl &O) { +static bool hasSameParameterTypes(const CXXMethodDecl &D, + const CXXMethodDecl &O) { if (D.getNumParams() != O.getNumParams()) return false; for (int I = 0, E = D.getNumParams(); I < E; ++I) { @@ -60,7 +60,7 @@ bool hasSameParameterTypes(const CXXMethodDecl &D, const CXXMethodDecl &O) { // If `D` has a const-qualified overload with otherwise identical // ref-qualifiers and parameter types, returns that overload. -const CXXMethodDecl *findConstOverload(const CXXMethodDecl &D) { +static const CXXMethodDecl *findConstOverload(const CXXMethodDecl &D) { assert(!D.isConst()); DeclContext::lookup_result LookupResult = @@ -81,7 +81,7 @@ const CXXMethodDecl *findConstOverload(const CXXMethodDecl &D) { // Returns true if both types are pointers or reference to the same type, // ignoring the const-qualifier. -bool pointsToSameTypeIgnoringConst(QualType A, QualType B) { +static bool pointsToSameTypeIgnoringConst(QualType A, QualType B) { assert(A->isPointerType() || A->isReferenceType()); assert(B->isPointerType() || B->isReferenceType()); return isSameTypeIgnoringConst(A->getPointeeType(), B->getPointeeType()); @@ -122,7 +122,7 @@ bool pointsToSameTypeIgnoringConst(QualType A, QualType B) { // // This function checks (A) ad (B), but the caller should make sure that the // object is not mutated through the return value. -bool isLikelyShallowConst(const CXXMethodDecl &M) { +static bool isLikelyShallowConst(const CXXMethodDecl &M) { assert(!M.isConst()); // The method can mutate our variable. @@ -146,6 +146,8 @@ bool isLikelyShallowConst(const CXXMethodDecl &M) { return isSameTypeIgnoringConst(CallTy, OverloadTy); } +namespace { + // A matcher that matches DeclRefExprs that are used in ways such that the // underlying declaration is not modified. // If the declaration is of pointer type, `Indirections` specifies the level diff --git a/clang-tools-extra/clang-tidy/utils/DesignatedInitializers.cpp b/clang-tools-extra/clang-tidy/utils/DesignatedInitializers.cpp index 044f89be61342..b068ae24a391b 100644 --- a/clang-tools-extra/clang-tidy/utils/DesignatedInitializers.cpp +++ b/clang-tools-extra/clang-tidy/utils/DesignatedInitializers.cpp @@ -19,8 +19,6 @@ namespace clang::tidy::utils { -namespace { - /// Returns true if Name is reserved, like _Foo or __Vector_base. static inline bool isReservedName(llvm::StringRef Name) { // This doesn't catch all cases, but the most common. @@ -28,6 +26,8 @@ static inline bool isReservedName(llvm::StringRef Name) { (isUppercase(Name[1]) || Name[1] == '_'); } +namespace { + // Helper class to iterate over the designator names of an aggregate type. // // For an array type, yields [0], [1], [2]... @@ -112,6 +112,8 @@ class AggregateDesignatorNames { RecordDecl::field_iterator FieldsEnd; }; +} // namespace + // Collect designator labels describing the elements of an init list. // // This function contributes the designators of some (sub)object, which is @@ -127,10 +129,9 @@ class AggregateDesignatorNames { // '.a:' is produced directly without recursing into the written sublist. // (The written sublist will have a separate collectDesignators() call later). // Recursion with Prefix='.b' and Sem = {3, ImplicitValue} produces '.b.x:'. -void collectDesignators(const InitListExpr *Sem, - llvm::DenseMap &Out, - const llvm::DenseSet &NestedBraces, - std::string &Prefix) { +static void collectDesignators( + const InitListExpr *Sem, llvm::DenseMap &Out, + const llvm::DenseSet &NestedBraces, std::string &Prefix) { if (!Sem || Sem->isTransparent()) return; assert(Sem->isSemanticForm()); @@ -170,8 +171,6 @@ void collectDesignators(const InitListExpr *Sem, } } -} // namespace - llvm::DenseMap getUnwrittenDesignators(const InitListExpr *Syn) { assert(Syn->isSyntacticForm());