This revision was automatically updated to reflect the committed changes. Closed by commit rL284873: [clang-tidy] Don't use a SmallSetVector of an enum. (authored by jlebar).
Changed prior to commit: https://reviews.llvm.org/D25647?vs=75443&id=75478#toc Repository: rL LLVM https://reviews.llvm.org/D25647 Files: clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h Index: clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h =================================================================== --- clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h +++ clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h @@ -31,7 +31,7 @@ void check(const ast_matchers::MatchFinder::MatchResult &Result) override; void onEndOfTranslationUnit() override; - enum class SpecialMemberFunctionKind { + enum class SpecialMemberFunctionKind : uint8_t { Destructor, CopyConstructor, CopyAssignment, @@ -43,7 +43,7 @@ using ClassDefiningSpecialMembersMap = llvm::DenseMap<ClassDefId, - llvm::SmallSetVector<SpecialMemberFunctionKind, 5>>; + llvm::SmallVector<SpecialMemberFunctionKind, 5>>; private: ClassDefiningSpecialMembersMap ClassWithSpecialMembers; Index: clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp @@ -97,8 +97,13 @@ {"move-assign", SpecialMemberFunctionKind::MoveAssignment}}; for (const auto &KV : Matchers) - if (Result.Nodes.getNodeAs<CXXMethodDecl>(KV.first)) - ClassWithSpecialMembers[ID].insert(KV.second); + if (Result.Nodes.getNodeAs<CXXMethodDecl>(KV.first)) { + SpecialMemberFunctionKind Kind = KV.second; + llvm::SmallVectorImpl<SpecialMemberFunctionKind> &Members = + ClassWithSpecialMembers[ID]; + if (find(Members, Kind) == Members.end()) + Members.push_back(Kind); + } } void SpecialMemberFunctionsCheck::onEndOfTranslationUnit() { @@ -125,7 +130,7 @@ std::back_inserter(UndefinedSpecialMembers)); diag(C.first.first, "class '%0' defines %1 but does not define %2") - << C.first.second << join(DefinedSpecialMembers.getArrayRef(), " and ") + << C.first.second << join(DefinedSpecialMembers, " and ") << join(UndefinedSpecialMembers, " or "); } }
Index: clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h =================================================================== --- clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h +++ clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h @@ -31,7 +31,7 @@ void check(const ast_matchers::MatchFinder::MatchResult &Result) override; void onEndOfTranslationUnit() override; - enum class SpecialMemberFunctionKind { + enum class SpecialMemberFunctionKind : uint8_t { Destructor, CopyConstructor, CopyAssignment, @@ -43,7 +43,7 @@ using ClassDefiningSpecialMembersMap = llvm::DenseMap<ClassDefId, - llvm::SmallSetVector<SpecialMemberFunctionKind, 5>>; + llvm::SmallVector<SpecialMemberFunctionKind, 5>>; private: ClassDefiningSpecialMembersMap ClassWithSpecialMembers; Index: clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp @@ -97,8 +97,13 @@ {"move-assign", SpecialMemberFunctionKind::MoveAssignment}}; for (const auto &KV : Matchers) - if (Result.Nodes.getNodeAs<CXXMethodDecl>(KV.first)) - ClassWithSpecialMembers[ID].insert(KV.second); + if (Result.Nodes.getNodeAs<CXXMethodDecl>(KV.first)) { + SpecialMemberFunctionKind Kind = KV.second; + llvm::SmallVectorImpl<SpecialMemberFunctionKind> &Members = + ClassWithSpecialMembers[ID]; + if (find(Members, Kind) == Members.end()) + Members.push_back(Kind); + } } void SpecialMemberFunctionsCheck::onEndOfTranslationUnit() { @@ -125,7 +130,7 @@ std::back_inserter(UndefinedSpecialMembers)); diag(C.first.first, "class '%0' defines %1 but does not define %2") - << C.first.second << join(DefinedSpecialMembers.getArrayRef(), " and ") + << C.first.second << join(DefinedSpecialMembers, " and ") << join(UndefinedSpecialMembers, " or "); } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits