[clang] [clang-tools-extra] [clang][clang-tools-extra] Remove unused DenseMapInfo::getEmptyKey (PR #201987)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 5 19:53:06 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tidy
Author: Fangrui Song (MaskRay)
<details>
<summary>Changes</summary>
After #<!-- -->201281 DenseMapInfo<T>::getEmptyKey() is no longer used by
DenseMap. Remove the unused getEmptyKey definitions and dead sentinel
uses.
---
Patch is 43.82 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/201987.diff
51 Files Affected:
- (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h (-8)
- (modified) clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp (-8)
- (modified) clang-tools-extra/clangd/Config.h (-3)
- (modified) clang-tools-extra/clangd/Headers.h (-4)
- (modified) clang-tools-extra/clangd/Protocol.h (-5)
- (modified) clang-tools-extra/clangd/SystemIncludeExtractor.cpp (-5)
- (modified) clang-tools-extra/clangd/index/Ref.h (-4)
- (modified) clang-tools-extra/clangd/index/SymbolID.h (-4)
- (modified) clang-tools-extra/clangd/index/dex/Token.h (-4)
- (modified) clang-tools-extra/clangd/index/dex/Trigram.h (-3)
- (modified) clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h (-7)
- (modified) clang/include/clang/AST/APValue.h (-1)
- (modified) clang/include/clang/AST/ASTContext.h (-5)
- (modified) clang/include/clang/AST/ASTTypeTraits.h (+1-10)
- (modified) clang/include/clang/AST/BaseSubobject.h (-6)
- (modified) clang/include/clang/AST/CharUnits.h (-7)
- (modified) clang/include/clang/AST/DeclID.h (-8)
- (modified) clang/include/clang/AST/DeclarationName.h (-4)
- (modified) clang/include/clang/AST/GlobalDecl.h (-4)
- (modified) clang/include/clang/AST/NestedNameSpecifier.h (-7)
- (modified) clang/include/clang/AST/Redeclarable.h (-8)
- (modified) clang/include/clang/AST/TypeOrdering.h (-6)
- (modified) clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h (-4)
- (modified) clang/include/clang/Analysis/CallGraph.h (-6)
- (modified) clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h (-5)
- (modified) clang/include/clang/Analysis/FlowSensitive/Formula.h (-1)
- (modified) clang/include/clang/Analysis/ProgramPoint.h (-7)
- (modified) clang/include/clang/Analysis/RetainSummaryManager.h (-5)
- (modified) clang/include/clang/Basic/DirectoryEntry.h (-20)
- (modified) clang/include/clang/Basic/FileEntry.h (-21)
- (modified) clang/include/clang/Basic/IdentifierTable.h (-4)
- (modified) clang/include/clang/Basic/Module.h (-4)
- (modified) clang/include/clang/Basic/SourceLocation.h (-13)
- (modified) clang/include/clang/Basic/TokenKinds.h (-3)
- (modified) clang/include/clang/DependencyScanning/DependencyGraph.h (-1)
- (modified) clang/include/clang/Sema/ScopeInfo.h (-4)
- (modified) clang/include/clang/Sema/SemaCUDA.h (-4)
- (modified) clang/include/clang/Sema/Weak.h (-3)
- (modified) clang/include/clang/Serialization/ASTBitCodes.h (-8)
- (modified) clang/include/clang/Tooling/Inclusions/StandardLibrary.h (-8)
- (modified) clang/lib/APINotes/APINotesFormat.h (-13)
- (modified) clang/lib/AST/APValue.cpp (-7)
- (modified) clang/lib/AST/ExprConstant.cpp (-3)
- (modified) clang/lib/AST/ItaniumCXXABI.cpp (-22)
- (modified) clang/lib/CodeGen/CGObjCMacConstantLiteralUtil.h (-8)
- (modified) clang/lib/CodeGen/CodeGenTBAA.h (-10)
- (modified) clang/lib/Sema/SemaStmt.cpp (-9)
- (modified) clang/lib/StaticAnalyzer/Core/CallEvent.cpp (-4)
- (modified) clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp (-1)
- (modified) clang/tools/libclang/CXCursor.cpp (-3)
- (modified) clang/tools/libclang/Indexing.cpp (-4)
``````````diff
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h
index e3ed12de4fd3e..78447df5a1b36 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h
@@ -83,20 +83,12 @@ struct DenseMapInfo<
using ClassDefId =
clang::tidy::cppcoreguidelines::SpecialMemberFunctionsCheck::ClassDefId;
- static ClassDefId getEmptyKey() {
- return {DenseMapInfo<clang::SourceLocation>::getEmptyKey(), "EMPTY"};
- }
-
static unsigned getHashValue(const ClassDefId &Val) {
- assert(Val != getEmptyKey() && "Cannot hash the empty key!");
-
const std::hash<ClassDefId::second_type> SecondHash;
return Val.first.getHashValue() + SecondHash(Val.second);
}
static bool isEqual(const ClassDefId &LHS, const ClassDefId &RHS) {
- if (RHS == getEmptyKey())
- return LHS == getEmptyKey();
return LHS == RHS;
}
};
diff --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
index c4b800d2c9e19..cb7ef19827675 100644
--- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
@@ -30,20 +30,12 @@ template <>
struct DenseMapInfo<clang::tidy::RenamerClangTidyCheck::NamingCheckId> {
using NamingCheckId = clang::tidy::RenamerClangTidyCheck::NamingCheckId;
- static NamingCheckId getEmptyKey() {
- return {DenseMapInfo<clang::SourceLocation>::getEmptyKey(), "EMPTY"};
- }
-
static unsigned getHashValue(NamingCheckId Val) {
- assert(Val != getEmptyKey() && "Cannot hash the empty key!");
-
return DenseMapInfo<clang::SourceLocation>::getHashValue(Val.first) +
DenseMapInfo<StringRef>::getHashValue(Val.second);
}
static bool isEqual(const NamingCheckId &LHS, const NamingCheckId &RHS) {
- if (RHS == getEmptyKey())
- return LHS == getEmptyKey();
return LHS == RHS;
}
};
diff --git a/clang-tools-extra/clangd/Config.h b/clang-tools-extra/clangd/Config.h
index 450ca6ea93ddc..a94a1727199bd 100644
--- a/clang-tools-extra/clangd/Config.h
+++ b/clang-tools-extra/clangd/Config.h
@@ -229,9 +229,6 @@ struct Config {
namespace llvm {
template <> struct DenseMapInfo<clang::clangd::Config::ExternalIndexSpec> {
using ExternalIndexSpec = clang::clangd::Config::ExternalIndexSpec;
- static inline ExternalIndexSpec getEmptyKey() {
- return {ExternalIndexSpec::File, "", ""};
- }
static unsigned getHashValue(const ExternalIndexSpec &Val) {
return llvm::hash_combine(Val.Kind, Val.Location, Val.MountPoint);
}
diff --git a/clang-tools-extra/clangd/Headers.h b/clang-tools-extra/clangd/Headers.h
index 05536529b22b9..050d972f24a29 100644
--- a/clang-tools-extra/clangd/Headers.h
+++ b/clang-tools-extra/clangd/Headers.h
@@ -273,10 +273,6 @@ namespace llvm {
// Support HeaderIDs as DenseMap keys.
template <> struct DenseMapInfo<clang::clangd::IncludeStructure::HeaderID> {
- static inline clang::clangd::IncludeStructure::HeaderID getEmptyKey() {
- return static_cast<clang::clangd::IncludeStructure::HeaderID>(-1);
- }
-
static unsigned
getHashValue(const clang::clangd::IncludeStructure::HeaderID &Tag) {
return hash_value(static_cast<unsigned>(Tag));
diff --git a/clang-tools-extra/clangd/Protocol.h b/clang-tools-extra/clangd/Protocol.h
index 67aea52ef43d4..b511ca495e47f 100644
--- a/clang-tools-extra/clangd/Protocol.h
+++ b/clang-tools-extra/clangd/Protocol.h
@@ -2108,11 +2108,6 @@ namespace llvm {
template <> struct DenseMapInfo<clang::clangd::Range> {
using Range = clang::clangd::Range;
- static inline Range getEmptyKey() {
- static clang::clangd::Position Tomb{-1, -1};
- static Range R{Tomb, Tomb};
- return R;
- }
static unsigned getHashValue(const Range &Val) {
return llvm::hash_combine(Val.start.line, Val.start.character, Val.end.line,
Val.end.character);
diff --git a/clang-tools-extra/clangd/SystemIncludeExtractor.cpp b/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
index 8809426f8130a..b4dbc1df1d636 100644
--- a/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
+++ b/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
@@ -217,11 +217,6 @@ struct DriverArgs {
namespace llvm {
using DriverArgs = clang::clangd::DriverArgs;
template <> struct DenseMapInfo<DriverArgs> {
- static DriverArgs getEmptyKey() {
- auto Driver = DriverArgs::getEmpty();
- Driver.Driver = "EMPTY_KEY";
- return Driver;
- }
static unsigned getHashValue(const DriverArgs &Val) {
unsigned FixedFieldsHash = llvm::hash_value(std::tuple{
Val.Driver,
diff --git a/clang-tools-extra/clangd/index/Ref.h b/clang-tools-extra/clangd/index/Ref.h
index aa7c88443e909..b71f09611fed1 100644
--- a/clang-tools-extra/clangd/index/Ref.h
+++ b/clang-tools-extra/clangd/index/Ref.h
@@ -171,10 +171,6 @@ class RefSlab {
namespace llvm {
template <> struct DenseMapInfo<clang::clangd::RefSlab::Builder::Entry> {
using Entry = clang::clangd::RefSlab::Builder::Entry;
- static inline Entry getEmptyKey() {
- static Entry E{clang::clangd::SymbolID(""), {}};
- return E;
- }
static unsigned getHashValue(const Entry &Val) {
return llvm::hash_combine(
Val.Symbol, reinterpret_cast<uintptr_t>(Val.Reference.Location.FileURI),
diff --git a/clang-tools-extra/clangd/index/SymbolID.h b/clang-tools-extra/clangd/index/SymbolID.h
index 929004aa70a25..d13eea1a9028b 100644
--- a/clang-tools-extra/clangd/index/SymbolID.h
+++ b/clang-tools-extra/clangd/index/SymbolID.h
@@ -81,10 +81,6 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const SymbolID &ID);
namespace llvm {
// Support SymbolIDs as DenseMap keys.
template <> struct DenseMapInfo<clang::clangd::SymbolID> {
- static inline clang::clangd::SymbolID getEmptyKey() {
- static clang::clangd::SymbolID EmptyKey("EMPTYKEY");
- return EmptyKey;
- }
static unsigned getHashValue(const clang::clangd::SymbolID &Sym) {
return hash_value(Sym);
}
diff --git a/clang-tools-extra/clangd/index/dex/Token.h b/clang-tools-extra/clangd/index/dex/Token.h
index f69d8f1f117ef..98a504c4c3fa2 100644
--- a/clang-tools-extra/clangd/index/dex/Token.h
+++ b/clang-tools-extra/clangd/index/dex/Token.h
@@ -115,10 +115,6 @@ namespace llvm {
// Support Tokens as DenseMap keys.
template <> struct DenseMapInfo<clang::clangd::dex::Token> {
- static inline clang::clangd::dex::Token getEmptyKey() {
- return {clang::clangd::dex::Token::Kind::Sentinel, "EmptyKey"};
- }
-
static unsigned getHashValue(const clang::clangd::dex::Token &Tag) {
return hash_value(Tag);
}
diff --git a/clang-tools-extra/clangd/index/dex/Trigram.h b/clang-tools-extra/clangd/index/dex/Trigram.h
index 6bdb72f0caf7e..bad3c4378598f 100644
--- a/clang-tools-extra/clangd/index/dex/Trigram.h
+++ b/clang-tools-extra/clangd/index/dex/Trigram.h
@@ -90,9 +90,6 @@ std::vector<Token> generateQueryTrigrams(llvm::StringRef Query);
namespace llvm {
template <> struct DenseMapInfo<clang::clangd::dex::Trigram> {
using Trigram = clang::clangd::dex::Trigram;
- static inline Trigram getEmptyKey() {
- return Trigram(Trigram::Sentinel::Empty);
- }
static unsigned getHashValue(Trigram V) {
// Finalize step from MurmurHash3.
uint32_t X = V.id();
diff --git a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
index 99d65266bf53d..341cf1851142b 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
@@ -219,9 +219,6 @@ template <> struct DenseMapInfo<clang::include_cleaner::Symbol> {
using Outer = clang::include_cleaner::Symbol;
using Base = DenseMapInfo<decltype(Outer::Storage)>;
- static Outer getEmptyKey() {
- return {Outer::SentinelTag{}, Base::getEmptyKey()};
- }
static unsigned getHashValue(const Outer &Val) {
return Base::getHashValue(Val.Storage);
}
@@ -233,7 +230,6 @@ template <> struct DenseMapInfo<clang::include_cleaner::Macro> {
using Outer = clang::include_cleaner::Macro;
using Base = DenseMapInfo<decltype(Outer::Definition)>;
- static Outer getEmptyKey() { return {nullptr, Base::getEmptyKey()}; }
static unsigned getHashValue(const Outer &Val) {
return Base::getHashValue(Val.Definition);
}
@@ -245,9 +241,6 @@ template <> struct DenseMapInfo<clang::include_cleaner::Header> {
using Outer = clang::include_cleaner::Header;
using Base = DenseMapInfo<decltype(Outer::Storage)>;
- static Outer getEmptyKey() {
- return {Outer::SentinelTag{}, Base::getEmptyKey()};
- }
static unsigned getHashValue(const Outer &Val) {
return Base::getHashValue(Val.Storage);
}
diff --git a/clang/include/clang/AST/APValue.h b/clang/include/clang/AST/APValue.h
index 22f0ad18caee4..acbd922ba5319 100644
--- a/clang/include/clang/AST/APValue.h
+++ b/clang/include/clang/AST/APValue.h
@@ -838,7 +838,6 @@ class APValue {
namespace llvm {
template<> struct DenseMapInfo<clang::APValue::LValueBase> {
- static clang::APValue::LValueBase getEmptyKey();
static unsigned getHashValue(const clang::APValue::LValueBase &Base);
static bool isEqual(const clang::APValue::LValueBase &LHS,
const clang::APValue::LValueBase &RHS);
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index 54c046f5fab4a..6cdcb0ec1eb0b 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -70,9 +70,6 @@ struct ScalableVecTyKey {
// Provide a DenseMapInfo specialization so that ScalableVecTyKey can be used
// as a key in DenseMap.
template <> struct DenseMapInfo<ScalableVecTyKey> {
- static inline ScalableVecTyKey getEmptyKey() {
- return {DenseMapInfo<clang::QualType>::getEmptyKey(), ~0U, ~0U};
- }
static unsigned getHashValue(const ScalableVecTyKey &Val) {
return hash_combine(DenseMapInfo<clang::QualType>::getHashValue(Val.EltTy),
Val.NumElts, Val.NumFields);
@@ -4005,8 +4002,6 @@ typename clang::LazyGenerationalUpdatePtr<Owner, T, Update>::ValueType
return Value;
}
template <> struct llvm::DenseMapInfo<llvm::FoldingSetNodeID> {
- static FoldingSetNodeID getEmptyKey() { return FoldingSetNodeID{}; }
-
static unsigned getHashValue(const FoldingSetNodeID &Val) {
return Val.ComputeHash();
}
diff --git a/clang/include/clang/AST/ASTTypeTraits.h b/clang/include/clang/AST/ASTTypeTraits.h
index e8a18725645c0..40d715390e757 100644
--- a/clang/include/clang/AST/ASTTypeTraits.h
+++ b/clang/include/clang/AST/ASTTypeTraits.h
@@ -109,7 +109,6 @@ class ASTNodeKind {
/// Hooks for using ASTNodeKind as a key in a DenseMap.
struct DenseMapInfo {
// ASTNodeKind() is a good empty key because it is represented as a 0.
- static inline ASTNodeKind getEmptyKey() { return ASTNodeKind(); }
static unsigned getHashValue(const ASTNodeKind &Val) { return Val.KindId; }
static bool isEqual(const ASTNodeKind &LHS, const ASTNodeKind &RHS) {
return LHS.KindId == RHS.KindId;
@@ -369,11 +368,6 @@ class DynTypedNode {
/// Hooks for using DynTypedNode as a key in a DenseMap.
struct DenseMapInfo {
- static inline DynTypedNode getEmptyKey() {
- DynTypedNode Node;
- Node.NodeKind = ASTNodeKind::DenseMapInfo::getEmptyKey();
- return Node;
- }
static unsigned getHashValue(const DynTypedNode &Val) {
// FIXME: Add hashing support for the remaining types.
if (ASTNodeKind::getFromNodeKind<TypeLoc>().isBaseOf(Val.NodeKind)) {
@@ -394,10 +388,7 @@ class DynTypedNode {
return llvm::hash_value(Val.getMemoizationData());
}
static bool isEqual(const DynTypedNode &LHS, const DynTypedNode &RHS) {
- auto Empty = ASTNodeKind::DenseMapInfo::getEmptyKey();
- return (ASTNodeKind::DenseMapInfo::isEqual(LHS.NodeKind, Empty) &&
- ASTNodeKind::DenseMapInfo::isEqual(RHS.NodeKind, Empty)) ||
- LHS == RHS;
+ return LHS == RHS;
}
};
diff --git a/clang/include/clang/AST/BaseSubobject.h b/clang/include/clang/AST/BaseSubobject.h
index f98c323a0b110..328572802d582 100644
--- a/clang/include/clang/AST/BaseSubobject.h
+++ b/clang/include/clang/AST/BaseSubobject.h
@@ -55,12 +55,6 @@ class BaseSubobject {
namespace llvm {
template<> struct DenseMapInfo<clang::BaseSubobject> {
- static clang::BaseSubobject getEmptyKey() {
- return clang::BaseSubobject(
- DenseMapInfo<const clang::CXXRecordDecl *>::getEmptyKey(),
- clang::CharUnits::fromQuantity(DenseMapInfo<int64_t>::getEmptyKey()));
- }
-
static unsigned getHashValue(const clang::BaseSubobject &Base) {
using PairTy = std::pair<const clang::CXXRecordDecl *, clang::CharUnits>;
diff --git a/clang/include/clang/AST/CharUnits.h b/clang/include/clang/AST/CharUnits.h
index e6e6b93e0c192..aee838e60f948 100644
--- a/clang/include/clang/AST/CharUnits.h
+++ b/clang/include/clang/AST/CharUnits.h
@@ -230,13 +230,6 @@ inline clang::CharUnits operator* (clang::CharUnits::QuantityType Scale,
namespace llvm {
template<> struct DenseMapInfo<clang::CharUnits> {
- static clang::CharUnits getEmptyKey() {
- clang::CharUnits::QuantityType Quantity =
- DenseMapInfo<clang::CharUnits::QuantityType>::getEmptyKey();
-
- return clang::CharUnits::fromQuantity(Quantity);
- }
-
static unsigned getHashValue(const clang::CharUnits &CU) {
clang::CharUnits::QuantityType Quantity = CU.getQuantity();
return DenseMapInfo<clang::CharUnits::QuantityType>::getHashValue(Quantity);
diff --git a/clang/include/clang/AST/DeclID.h b/clang/include/clang/AST/DeclID.h
index 8a173e3d96349..dab8ddc601843 100644
--- a/clang/include/clang/AST/DeclID.h
+++ b/clang/include/clang/AST/DeclID.h
@@ -248,10 +248,6 @@ template <> struct DenseMapInfo<clang::GlobalDeclID> {
using GlobalDeclID = clang::GlobalDeclID;
using DeclID = GlobalDeclID::DeclID;
- static GlobalDeclID getEmptyKey() {
- return GlobalDeclID(DenseMapInfo<DeclID>::getEmptyKey());
- }
-
static unsigned getHashValue(const GlobalDeclID &Key) {
return DenseMapInfo<DeclID>::getHashValue(Key.getRawValue());
}
@@ -265,10 +261,6 @@ template <> struct DenseMapInfo<clang::LocalDeclID> {
using LocalDeclID = clang::LocalDeclID;
using DeclID = LocalDeclID::DeclID;
- static LocalDeclID getEmptyKey() {
- return LocalDeclID(DenseMapInfo<DeclID>::getEmptyKey());
- }
-
static unsigned getHashValue(const LocalDeclID &Key) {
return DenseMapInfo<DeclID>::getHashValue(Key.getRawValue());
}
diff --git a/clang/include/clang/AST/DeclarationName.h b/clang/include/clang/AST/DeclarationName.h
index 2cd7efcae5088..3a272c506ca8d 100644
--- a/clang/include/clang/AST/DeclarationName.h
+++ b/clang/include/clang/AST/DeclarationName.h
@@ -924,10 +924,6 @@ namespace llvm {
/// in DenseMap and DenseSets.
template<>
struct DenseMapInfo<clang::DeclarationName> {
- static inline clang::DeclarationName getEmptyKey() {
- return clang::DeclarationName::getEmptyMarker();
- }
-
static unsigned getHashValue(clang::DeclarationName Name) {
return DenseMapInfo<void*>::getHashValue(Name.getAsOpaquePtr());
}
diff --git a/clang/include/clang/AST/GlobalDecl.h b/clang/include/clang/AST/GlobalDecl.h
index b9a06afc271ca..0f9ff9496ff88 100644
--- a/clang/include/clang/AST/GlobalDecl.h
+++ b/clang/include/clang/AST/GlobalDecl.h
@@ -215,10 +215,6 @@ class GlobalDecl {
namespace llvm {
template<> struct DenseMapInfo<clang::GlobalDecl> {
- static inline clang::GlobalDecl getEmptyKey() {
- return clang::GlobalDecl();
- }
-
static unsigned getHashValue(clang::GlobalDecl GD) {
return DenseMapInfo<void*>::getHashValue(GD.getAsOpaquePtr());
}
diff --git a/clang/include/clang/AST/NestedNameSpecifier.h b/clang/include/clang/AST/NestedNameSpecifier.h
index ac1439c70ce7b..b7d24d5397077 100644
--- a/clang/include/clang/AST/NestedNameSpecifier.h
+++ b/clang/include/clang/AST/NestedNameSpecifier.h
@@ -253,8 +253,6 @@ SourceRange NestedNameSpecifierLocBuilder::getSourceRange() const {
namespace llvm {
template <> struct DenseMapInfo<clang::NestedNameSpecifier> {
- static clang::NestedNameSpecifier getEmptyKey() { return std::nullopt; }
-
static unsigned getHashValue(const clang::NestedNameSpecifier &V) {
return hash_combine(V.getAsVoidPointer());
}
@@ -264,11 +262,6 @@ template <> struct DenseMapInfo<clang::NestedNameSpecifierLoc> {
using FirstInfo = DenseMapInfo<clang::NestedNameSpecifier>;
using SecondInfo = DenseMapInfo<void *>;
- static clang::NestedNameSpecifierLoc getEmptyKey() {
- return clang::NestedNameSpecifierLoc(FirstInfo::getEmptyKey(),
- SecondInfo::getEmptyKey());
- }
-
static unsigned getHashValue(const clang::NestedNameSpecifierLoc &PairVal) {
return hash_combine(
FirstInfo::getHashValue(PairVal.getNestedNameSpecifier()),
diff --git a/clang/include/clang/AST/Redeclarable.h b/clang/include/clang/AST/Redeclarable.h
index 6a3f485a5f5da..28fff4f43823c 100644
--- a/clang/include/clang/AST/Redeclarable.h
+++ b/clang/include/clang/AST/Redeclarable.h
@@ -383,14 +383,6 @@ struct DenseMapInfo<clang::CanonicalDeclPtr<decl_type>> {
using CanonicalDeclPtr = clang::CanonicalDeclPtr<decl_type>;
using BaseInfo = DenseMapInfo<decl_type *>;
- static CanonicalDeclPtr getEmptyKey() {
- // Construct our CanonicalDeclPtr this way because the regular constructor
- // would dereference P.Ptr, which is not allowed.
- CanonicalDeclPtr P;
- P.Ptr = BaseInfo::getEmptyKey();
- return P;
- }
-
static unsigned getHashValue(const CanonicalDeclPtr &P) {
return BaseInfo::getHashValue(P);
}
diff --git a/clang/include/clang/AST/TypeOrdering.h b/clang/include/clang/AST/TypeOrdering.h
index 0626cb97217f2..dd858c8c0b0ca 100644
--- a/clang/include/clang/AST/TypeOrdering.h
+++ b/clang/include/clang/AST/TypeOrdering.h
@@ -36,8 +36,6 @@ struct QualTypeOrdering {
namespace llvm {
template<> struct DenseMapInfo<clang::QualType> {
- static inline clang::QualType getEmptyKey() { return clang::QualType(); }
-
static unsigned getHashValue(clang::QualType Val) {
return (unsigned)((uintptr_t)Val.getAsOpaquePtr()) ^
((unsigned)((uintptr_t)Val.getAsOpaquePtr() >> 9));
@@ -49,10 +47,6 @@ namespace llvm {
};
template<> struct DenseMapInfo<clang::CanQualType> {
- static inline clang::CanQualType getEmptyKey() {
- return clang::CanQualType();
- }
-
static unsigned getHashValue(clang::CanQualType Val) {
return (unsigned)((uintptr_t)Val.getAsOpaquePtr()) ^
((unsigned)((uintptr_t)Val.getAsOpaquePtr() >> 9));
diff --git a/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h b/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h
index 0a89de4dcfeb1..61e01787e3db8 100644
--- a/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h
+++ b/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h
@@ -99,10 +99,6 @@ template <typename Tag>
struct DenseMapInfo<clang::lifetimes::internal::utils::ID<Tag>> {
using ID = clang::lifetimes::internal::utils::ID<Tag>;
- static inline ID getEmptyKey() {
- return {DenseMapInfo<uint32_t>::getEmptyKey()};
- }
-
static unsigned getHashValue(const ID &Val) {
return DenseMapInfo<uint32_t>::getHashValue(Val.Value);
}
diff --git a/clang/include/clang/Analysis/CallGraph.h b/clang/include/clang/Analysis/CallGraph.h
index 4c4b940ef110a..76d1bd1dc9f34 100644
--- a/clang/include/clang/Analysis/CallGraph.h
+++ b/clang/include/clang/Analysis/CallGraph.h
@@ -214,12 +214,6 @@ namespace llvm {
// Specialize DenseMapInfo for clang::CallGraphNode::CallRecord.
template <> struct DenseMapInfo<clang::CallGraphNode::CallRecord> {
- static inline clang::CallGraphNode::CallRecord getEmptyKey() {
- return clang::CallGraphNode::CallRecord(
- DenseMapInfo<clang::CallGraphNode *>::getEmptyKey(),
- DenseMapInfo<clang::Expr *>::getEmptyKey());
- }
-
static unsigned getHashValue(const clang::CallGraphNode::CallRecord &Val) {
// NOTE: we are comparing based on the callee only.
...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/201987
More information about the cfe-commits
mailing list