diff options
author | Justin Lebar <jlebar@google.com> | 2016-10-21 20:13:39 +0000 |
---|---|---|
committer | Justin Lebar <jlebar@google.com> | 2016-10-21 20:13:39 +0000 |
commit | ae90ad2065786be5168919740100258cf0fe43f9 (patch) | |
tree | 04cd6b38365c99d9b2d2d1be60f7368d9ce93ce2 | |
parent | c9d66eb05b3e76e3d33e4f11525ef888f1629234 (diff) | |
download | bcm5719-llvm-ae90ad2065786be5168919740100258cf0fe43f9.tar.gz bcm5719-llvm-ae90ad2065786be5168919740100258cf0fe43f9.zip |
[clang-tidy] Don't use a SmallSetVector of an enum.
Summary:
This doesn't work after converting SmallSetVector to use DenseSet.
Instead we can just use a SmallVector.
Reviewers: timshen
Subscribers: nemanjai, cfe-commits
Differential Revision: https://reviews.llvm.org/D25647
llvm-svn: 284873
-rw-r--r-- | clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp | 11 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h | 4 |
2 files changed, 10 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp index 5a487d54e81..62f791e6576 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.cpp @@ -97,8 +97,13 @@ void SpecialMemberFunctionsCheck::check( {"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 @@ void SpecialMemberFunctionsCheck::onEndOfTranslationUnit() { 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 "); } } diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h index 227d3591cf0..c4e31c2f457 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h @@ -31,7 +31,7 @@ public: 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 @@ public: using ClassDefiningSpecialMembersMap = llvm::DenseMap<ClassDefId, - llvm::SmallSetVector<SpecialMemberFunctionKind, 5>>; + llvm::SmallVector<SpecialMemberFunctionKind, 5>>; private: ClassDefiningSpecialMembersMap ClassWithSpecialMembers; |