diff --git a/clang/include/clang/AST/DeclarationName.h b/clang/include/clang/AST/DeclarationName.h index 82f6868e3a7e1a..a037e8b197bc35 100644 --- a/clang/include/clang/AST/DeclarationName.h +++ b/clang/include/clang/AST/DeclarationName.h @@ -857,6 +857,16 @@ struct DenseMapInfo { } }; +template <> struct PointerLikeTypeTraits { + static inline void *getAsVoidPointer(clang::DeclarationName P) { + return P.getAsOpaquePtr(); + } + static inline clang::DeclarationName getFromVoidPointer(void *P) { + return clang::DeclarationName::getFromOpaquePtr(P); + } + static constexpr int NumLowBitsAvailable = 0; +}; + } // namespace llvm // The definition of AssumedTemplateStorage is factored out of TemplateName to diff --git a/clang/include/clang/AST/Redeclarable.h b/clang/include/clang/AST/Redeclarable.h index 0975773dd2cb57..87252337a0f4b5 100644 --- a/clang/include/clang/AST/Redeclarable.h +++ b/clang/include/clang/AST/Redeclarable.h @@ -370,6 +370,7 @@ template class CanonicalDeclPtr { private: friend struct llvm::DenseMapInfo>; + friend struct llvm::PointerLikeTypeTraits>; decl_type *Ptr = nullptr; }; @@ -407,6 +408,20 @@ struct DenseMapInfo> { } }; +template +struct PointerLikeTypeTraits> { + static inline void *getAsVoidPointer(clang::CanonicalDeclPtr P) { + return P.Ptr; + } + static inline clang::CanonicalDeclPtr getFromVoidPointer(void *P) { + clang::CanonicalDeclPtr C; + C.Ptr = PointerLikeTypeTraits::getFromVoidPtr(P); + return C; + } + static constexpr int NumLowBitsAvailable = + PointerLikeTypeTraits::NumLowBitsAvailable; +}; + } // namespace llvm #endif // LLVM_CLANG_AST_REDECLARABLE_H diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 2f2b52106f3d47..735349c3de6266 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -42,7 +42,7 @@ #include "clang/Sema/TemplateInstCallback.h" #include "clang/Sema/TypoCorrection.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/TimeProfiler.h" using namespace clang; @@ -1490,7 +1490,7 @@ class DeferredDiagnosticsEmitter typedef UsedDeclVisitor Inherited; // Whether the function is already in the current use-path. - llvm::SmallSet, 4> InUsePath; + llvm::SmallPtrSet, 4> InUsePath; // The current use-path. llvm::SmallVector, 4> UsePath; @@ -1499,7 +1499,7 @@ class DeferredDiagnosticsEmitter // case not in OpenMP device context. Done[1] is for the case in OpenMP // device context. We need two sets because diagnostics emission may be // different depending on whether it is in OpenMP device context. - llvm::SmallSet, 4> DoneMap[2]; + llvm::SmallPtrSet, 4> DoneMap[2]; // Emission state of the root node of the current use graph. bool ShouldEmitRootNode; diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 212f5e4746d603..001fabff96ff25 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -172,7 +172,7 @@ ParsedType Sema::getDestructorName(SourceLocation TildeLoc, bool Failed = false; llvm::SmallVector FoundDecls; - llvm::SmallSet, 8> FoundDeclSet; + llvm::SmallPtrSet, 8> FoundDeclSet; // If we have an object type, it's because we are in a // pseudo-destructor-expression or a member access expression, and diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 8bf605e5e76b8f..1e7d432217d5da 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -19028,7 +19028,7 @@ OMPClause *Sema::ActOnOpenMPUsesAllocatorClause( [](const UsesAllocatorsData &D) { return D.AllocatorTraits; }) && !findOMPAlloctraitT(*this, StartLoc, DSAStack)) return nullptr; - llvm::SmallSet, 4> PredefinedAllocators; + llvm::SmallPtrSet, 4> PredefinedAllocators; for (int I = 0; I < OMPAllocateDeclAttr::OMPUserDefinedMemAlloc; ++I) { auto AllocatorKind = static_cast(I); StringRef Allocator = diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 2345a12caeb2e8..a8803aeb1b8aba 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -81,7 +81,7 @@ #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/ScopeExit.h" -#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" @@ -3690,7 +3690,7 @@ ASTWriter::GenerateNameLookupTable(const DeclContext *ConstDC, // We also build up small sets of the constructor and conversion function // names which are visible. - llvm::SmallSet ConstructorNameSet, ConversionNameSet; + llvm::SmallPtrSet ConstructorNameSet, ConversionNameSet; for (auto &Lookup : *DC->buildLookup()) { auto &Name = Lookup.first; diff --git a/clang/lib/StaticAnalyzer/Checkers/ObjCMissingSuperCallChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/ObjCMissingSuperCallChecker.cpp index 24e2a4dea922e6..35a600f2d7b866 100644 --- a/clang/lib/StaticAnalyzer/Checkers/ObjCMissingSuperCallChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/ObjCMissingSuperCallChecker.cpp @@ -21,7 +21,7 @@ #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" #include "clang/StaticAnalyzer/Core/Checker.h" #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" -#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/raw_ostream.h" @@ -74,7 +74,7 @@ class ObjCSuperCallChecker : public Checker< void initializeSelectors(ASTContext &Ctx) const; void fillSelectors(ASTContext &Ctx, ArrayRef Sel, StringRef ClassName) const; - mutable llvm::StringMap > SelectorsForClass; + mutable llvm::StringMap> SelectorsForClass; mutable bool IsInitialized; }; @@ -100,7 +100,8 @@ bool ObjCSuperCallChecker::isCheckableClass(const ObjCImplementationDecl *D, void ObjCSuperCallChecker::fillSelectors(ASTContext &Ctx, ArrayRef Sel, StringRef ClassName) const { - llvm::SmallSet &ClassSelectors = SelectorsForClass[ClassName]; + llvm::SmallPtrSet &ClassSelectors = + SelectorsForClass[ClassName]; // Fill the Selectors SmallSet with all selectors we want to check. for (ArrayRef::iterator I = Sel.begin(), E = Sel.end(); I != E; ++I) {