|
@@ -20,6 +20,7 @@
|
|
|
#include "clang/AST/Type.h"
|
|
|
#include "llvm/ADT/DenseMap.h"
|
|
|
#include "llvm/ADT/Optional.h"
|
|
|
+#include "llvm/ADT/PointerIntPair.h"
|
|
|
|
|
|
namespace clang {
|
|
|
/// Kinds of LV computation. The linkage side of the computation is
|
|
@@ -36,6 +37,8 @@ struct LVComputationKind {
|
|
|
/// in computing linkage.
|
|
|
unsigned IgnoreAllVisibility : 1;
|
|
|
|
|
|
+ enum { NumLVComputationKindBits = 3 };
|
|
|
+
|
|
|
explicit LVComputationKind(NamedDecl::ExplicitVisibilityKind EK)
|
|
|
: ExplicitKind(EK), IgnoreExplicitVisibility(false),
|
|
|
IgnoreAllVisibility(false) {}
|
|
@@ -78,12 +81,14 @@ class LinkageComputer {
|
|
|
// using C = Foo<B, B>;
|
|
|
// using D = Foo<C, C>;
|
|
|
//
|
|
|
- // The unsigned represents an LVComputationKind.
|
|
|
- using QueryType = std::pair<const NamedDecl *, unsigned>;
|
|
|
+ // The integer represents an LVComputationKind.
|
|
|
+ using QueryType =
|
|
|
+ llvm::PointerIntPair<const NamedDecl *,
|
|
|
+ LVComputationKind::NumLVComputationKindBits>;
|
|
|
llvm::SmallDenseMap<QueryType, LinkageInfo, 8> CachedLinkageInfo;
|
|
|
|
|
|
static QueryType makeCacheKey(const NamedDecl *ND, LVComputationKind Kind) {
|
|
|
- return std::make_pair(ND, Kind.toBits());
|
|
|
+ return QueryType(ND, Kind.toBits());
|
|
|
}
|
|
|
|
|
|
llvm::Optional<LinkageInfo> lookup(const NamedDecl *ND,
|