mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 05:26:06 +00:00
Remove SequenceNumber from class/variable template partial specializations.
This was only used to ensure that the traversal order was the same as the insertion order, but that guarantee was already being provided by the use of a FoldingSetVector. llvm-svn: 189075
This commit is contained in:
parent
9f9c963e47
commit
b2f61b4a05
@ -1651,11 +1651,6 @@ class ClassTemplatePartialSpecializationDecl
|
||||
/// FIXME: redundant with TypeAsWritten?
|
||||
const ASTTemplateArgumentListInfo *ArgsAsWritten;
|
||||
|
||||
/// \brief Sequence number indicating when this class template partial
|
||||
/// specialization was added to the set of partial specializations for
|
||||
/// its owning class template.
|
||||
unsigned SequenceNumber;
|
||||
|
||||
/// \brief The class template partial specialization from which this
|
||||
/// class template partial specialization was instantiated.
|
||||
///
|
||||
@ -1673,13 +1668,11 @@ class ClassTemplatePartialSpecializationDecl
|
||||
const TemplateArgument *Args,
|
||||
unsigned NumArgs,
|
||||
const ASTTemplateArgumentListInfo *ArgsAsWritten,
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl,
|
||||
unsigned SequenceNumber);
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl);
|
||||
|
||||
ClassTemplatePartialSpecializationDecl()
|
||||
: ClassTemplateSpecializationDecl(ClassTemplatePartialSpecialization),
|
||||
TemplateParams(0), ArgsAsWritten(0), SequenceNumber(0),
|
||||
InstantiatedFromMember(0, false) { }
|
||||
TemplateParams(0), ArgsAsWritten(0), InstantiatedFromMember(0, false) { }
|
||||
|
||||
public:
|
||||
static ClassTemplatePartialSpecializationDecl *
|
||||
@ -1691,8 +1684,7 @@ public:
|
||||
unsigned NumArgs,
|
||||
const TemplateArgumentListInfo &ArgInfos,
|
||||
QualType CanonInjectedType,
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl,
|
||||
unsigned SequenceNumber);
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl);
|
||||
|
||||
static ClassTemplatePartialSpecializationDecl *
|
||||
CreateDeserialized(ASTContext &C, unsigned ID);
|
||||
@ -1712,11 +1704,6 @@ public:
|
||||
return ArgsAsWritten;
|
||||
}
|
||||
|
||||
/// \brief Get the sequence number for this class template partial
|
||||
/// specialization. Internal, only valid for specializations which
|
||||
/// are in the specialized class template's folding set.
|
||||
unsigned getSequenceNumber() const { return SequenceNumber; }
|
||||
|
||||
/// \brief Retrieve the member class template partial specialization from
|
||||
/// which this particular class template partial specialization was
|
||||
/// instantiated.
|
||||
@ -1929,13 +1916,6 @@ public:
|
||||
void AddPartialSpecialization(ClassTemplatePartialSpecializationDecl *D,
|
||||
void *InsertPos);
|
||||
|
||||
/// \brief Return the next partial specialization sequence number.
|
||||
unsigned getNextPartialSpecSequenceNumber() {
|
||||
// Do not load lazy specializations here. They get numbered as they are
|
||||
// loaded.
|
||||
return getCommonPtr()->PartialSpecializations.size();
|
||||
}
|
||||
|
||||
/// \brief Retrieve the partial specializations as an ordered list.
|
||||
void getPartialSpecializations(
|
||||
SmallVectorImpl<ClassTemplatePartialSpecializationDecl *> &PS);
|
||||
@ -2527,11 +2507,6 @@ class VarTemplatePartialSpecializationDecl
|
||||
/// FIXME: redundant with TypeAsWritten?
|
||||
const ASTTemplateArgumentListInfo *ArgsAsWritten;
|
||||
|
||||
/// \brief Sequence number indicating when this variable template partial
|
||||
/// specialization was added to the set of partial specializations for
|
||||
/// its owning variable template.
|
||||
unsigned SequenceNumber;
|
||||
|
||||
/// \brief The variable template partial specialization from which this
|
||||
/// variable template partial specialization was instantiated.
|
||||
///
|
||||
@ -2545,13 +2520,11 @@ class VarTemplatePartialSpecializationDecl
|
||||
SourceLocation IdLoc, TemplateParameterList *Params,
|
||||
VarTemplateDecl *SpecializedTemplate, QualType T, TypeSourceInfo *TInfo,
|
||||
StorageClass S, const TemplateArgument *Args, unsigned NumArgs,
|
||||
const ASTTemplateArgumentListInfo *ArgInfos,
|
||||
unsigned SequenceNumber);
|
||||
const ASTTemplateArgumentListInfo *ArgInfos);
|
||||
|
||||
VarTemplatePartialSpecializationDecl()
|
||||
: VarTemplateSpecializationDecl(VarTemplatePartialSpecialization),
|
||||
TemplateParams(0), ArgsAsWritten(0),
|
||||
SequenceNumber(0), InstantiatedFromMember(0, false) {}
|
||||
TemplateParams(0), ArgsAsWritten(0), InstantiatedFromMember(0, false) {}
|
||||
|
||||
public:
|
||||
static VarTemplatePartialSpecializationDecl *
|
||||
@ -2559,8 +2532,7 @@ public:
|
||||
SourceLocation IdLoc, TemplateParameterList *Params,
|
||||
VarTemplateDecl *SpecializedTemplate, QualType T,
|
||||
TypeSourceInfo *TInfo, StorageClass S, const TemplateArgument *Args,
|
||||
unsigned NumArgs, const TemplateArgumentListInfo &ArgInfos,
|
||||
unsigned SequenceNumber);
|
||||
unsigned NumArgs, const TemplateArgumentListInfo &ArgInfos);
|
||||
|
||||
static VarTemplatePartialSpecializationDecl *CreateDeserialized(ASTContext &C,
|
||||
unsigned ID);
|
||||
@ -2580,10 +2552,6 @@ public:
|
||||
return ArgsAsWritten;
|
||||
}
|
||||
|
||||
/// \brief Get the sequence number for this variable template partial
|
||||
/// specialization.
|
||||
unsigned getSequenceNumber() const { return SequenceNumber; }
|
||||
|
||||
/// \brief Retrieve the member variable template partial specialization from
|
||||
/// which this particular variable template partial specialization was
|
||||
/// instantiated.
|
||||
@ -2780,11 +2748,6 @@ public:
|
||||
void AddPartialSpecialization(VarTemplatePartialSpecializationDecl *D,
|
||||
void *InsertPos);
|
||||
|
||||
/// \brief Return the next partial specialization sequence number.
|
||||
unsigned getNextPartialSpecSequenceNumber() {
|
||||
return getCommonPtr()->PartialSpecializations.size();
|
||||
}
|
||||
|
||||
/// \brief Retrieve the partial specializations as an ordered list.
|
||||
void getPartialSpecializations(
|
||||
SmallVectorImpl<VarTemplatePartialSpecializationDecl *> &PS);
|
||||
|
@ -397,13 +397,11 @@ void ClassTemplateDecl::getPartialSpecializations(
|
||||
llvm::FoldingSetVector<ClassTemplatePartialSpecializationDecl> &PartialSpecs
|
||||
= getPartialSpecializations();
|
||||
PS.clear();
|
||||
PS.resize(PartialSpecs.size());
|
||||
PS.reserve(PartialSpecs.size());
|
||||
for (llvm::FoldingSetVector<ClassTemplatePartialSpecializationDecl>::iterator
|
||||
P = PartialSpecs.begin(), PEnd = PartialSpecs.end();
|
||||
P != PEnd; ++P) {
|
||||
assert(!PS[P->getSequenceNumber()]);
|
||||
PS[P->getSequenceNumber()] = P->getMostRecentDecl();
|
||||
}
|
||||
P != PEnd; ++P)
|
||||
PS.push_back(P->getMostRecentDecl());
|
||||
}
|
||||
|
||||
ClassTemplatePartialSpecializationDecl *
|
||||
@ -830,15 +828,14 @@ ClassTemplatePartialSpecializationDecl(ASTContext &Context, TagKind TK,
|
||||
const TemplateArgument *Args,
|
||||
unsigned NumArgs,
|
||||
const ASTTemplateArgumentListInfo *ArgInfos,
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl,
|
||||
unsigned SequenceNumber)
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl)
|
||||
: ClassTemplateSpecializationDecl(Context,
|
||||
ClassTemplatePartialSpecialization,
|
||||
TK, DC, StartLoc, IdLoc,
|
||||
SpecializedTemplate,
|
||||
Args, NumArgs, PrevDecl),
|
||||
TemplateParams(Params), ArgsAsWritten(ArgInfos),
|
||||
SequenceNumber(SequenceNumber), InstantiatedFromMember(0, false)
|
||||
InstantiatedFromMember(0, false)
|
||||
{
|
||||
AdoptTemplateParameterList(Params, this);
|
||||
}
|
||||
@ -853,8 +850,7 @@ Create(ASTContext &Context, TagKind TK,DeclContext *DC,
|
||||
unsigned NumArgs,
|
||||
const TemplateArgumentListInfo &ArgInfos,
|
||||
QualType CanonInjectedType,
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl,
|
||||
unsigned SequenceNumber) {
|
||||
ClassTemplatePartialSpecializationDecl *PrevDecl) {
|
||||
const ASTTemplateArgumentListInfo *ASTArgInfos =
|
||||
ASTTemplateArgumentListInfo::Create(Context, ArgInfos);
|
||||
|
||||
@ -865,8 +861,7 @@ Create(ASTContext &Context, TagKind TK,DeclContext *DC,
|
||||
SpecializedTemplate,
|
||||
Args, NumArgs,
|
||||
ASTArgInfos,
|
||||
PrevDecl,
|
||||
SequenceNumber);
|
||||
PrevDecl);
|
||||
Result->setSpecializationKind(TSK_ExplicitSpecialization);
|
||||
Result->MayHaveOutOfDateDef = false;
|
||||
|
||||
@ -1068,14 +1063,12 @@ void VarTemplateDecl::getPartialSpecializations(
|
||||
llvm::FoldingSetVector<VarTemplatePartialSpecializationDecl> &PartialSpecs =
|
||||
getPartialSpecializations();
|
||||
PS.clear();
|
||||
PS.resize(PartialSpecs.size());
|
||||
PS.reserve(PartialSpecs.size());
|
||||
for (llvm::FoldingSetVector<VarTemplatePartialSpecializationDecl>::iterator
|
||||
P = PartialSpecs.begin(),
|
||||
PEnd = PartialSpecs.end();
|
||||
P != PEnd; ++P) {
|
||||
assert(!PS[P->getSequenceNumber()]);
|
||||
PS[P->getSequenceNumber()] = P->getMostRecentDecl();
|
||||
}
|
||||
P != PEnd; ++P)
|
||||
PS.push_back(P->getMostRecentDecl());
|
||||
}
|
||||
|
||||
VarTemplatePartialSpecializationDecl *
|
||||
@ -1168,12 +1161,12 @@ VarTemplatePartialSpecializationDecl::VarTemplatePartialSpecializationDecl(
|
||||
SourceLocation IdLoc, TemplateParameterList *Params,
|
||||
VarTemplateDecl *SpecializedTemplate, QualType T, TypeSourceInfo *TInfo,
|
||||
StorageClass S, const TemplateArgument *Args, unsigned NumArgs,
|
||||
const ASTTemplateArgumentListInfo *ArgInfos, unsigned SequenceNumber)
|
||||
const ASTTemplateArgumentListInfo *ArgInfos)
|
||||
: VarTemplateSpecializationDecl(Context, VarTemplatePartialSpecialization,
|
||||
DC, StartLoc, IdLoc, SpecializedTemplate, T,
|
||||
TInfo, S, Args, NumArgs),
|
||||
TemplateParams(Params), ArgsAsWritten(ArgInfos),
|
||||
SequenceNumber(SequenceNumber), InstantiatedFromMember(0, false) {
|
||||
InstantiatedFromMember(0, false) {
|
||||
// TODO: The template parameters should be in DC by now. Verify.
|
||||
// AdoptTemplateParameterList(Params, DC);
|
||||
}
|
||||
@ -1184,14 +1177,14 @@ VarTemplatePartialSpecializationDecl::Create(
|
||||
SourceLocation IdLoc, TemplateParameterList *Params,
|
||||
VarTemplateDecl *SpecializedTemplate, QualType T, TypeSourceInfo *TInfo,
|
||||
StorageClass S, const TemplateArgument *Args, unsigned NumArgs,
|
||||
const TemplateArgumentListInfo &ArgInfos, unsigned SequenceNumber) {
|
||||
const TemplateArgumentListInfo &ArgInfos) {
|
||||
const ASTTemplateArgumentListInfo *ASTArgInfos
|
||||
= ASTTemplateArgumentListInfo::Create(Context, ArgInfos);
|
||||
|
||||
VarTemplatePartialSpecializationDecl *Result =
|
||||
new (Context) VarTemplatePartialSpecializationDecl(
|
||||
Context, DC, StartLoc, IdLoc, Params, SpecializedTemplate, T, TInfo,
|
||||
S, Args, NumArgs, ASTArgInfos, SequenceNumber);
|
||||
S, Args, NumArgs, ASTArgInfos);
|
||||
Result->setSpecializationKind(TSK_ExplicitSpecialization);
|
||||
return Result;
|
||||
}
|
||||
|
@ -2375,14 +2375,11 @@ DeclResult Sema::ActOnVarTemplateSpecialization(
|
||||
// Create a new class template partial specialization declaration node.
|
||||
VarTemplatePartialSpecializationDecl *PrevPartial =
|
||||
cast_or_null<VarTemplatePartialSpecializationDecl>(PrevDecl);
|
||||
unsigned SequenceNumber =
|
||||
PrevPartial ? PrevPartial->getSequenceNumber()
|
||||
: VarTemplate->getNextPartialSpecSequenceNumber();
|
||||
VarTemplatePartialSpecializationDecl *Partial =
|
||||
VarTemplatePartialSpecializationDecl::Create(
|
||||
Context, VarTemplate->getDeclContext(), TemplateKWLoc,
|
||||
TemplateNameLoc, TemplateParams, VarTemplate, DI->getType(), DI, SC,
|
||||
Converted.data(), Converted.size(), TemplateArgs, SequenceNumber);
|
||||
Converted.data(), Converted.size(), TemplateArgs);
|
||||
|
||||
if (!PrevPartial)
|
||||
VarTemplate->AddPartialSpecialization(Partial, InsertPos);
|
||||
@ -5837,8 +5834,6 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
|
||||
// Create a new class template partial specialization declaration node.
|
||||
ClassTemplatePartialSpecializationDecl *PrevPartial
|
||||
= cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl);
|
||||
unsigned SequenceNumber = PrevPartial? PrevPartial->getSequenceNumber()
|
||||
: ClassTemplate->getNextPartialSpecSequenceNumber();
|
||||
ClassTemplatePartialSpecializationDecl *Partial
|
||||
= ClassTemplatePartialSpecializationDecl::Create(Context, Kind,
|
||||
ClassTemplate->getDeclContext(),
|
||||
@ -5849,8 +5844,7 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
|
||||
Converted.size(),
|
||||
TemplateArgs,
|
||||
CanonType,
|
||||
PrevPartial,
|
||||
SequenceNumber);
|
||||
PrevPartial);
|
||||
SetNestedNameSpecifier(Partial, SS);
|
||||
if (TemplateParameterLists.size() > 1 && SS.isSet()) {
|
||||
Partial->setTemplateParameterListsInfo(Context,
|
||||
|
@ -2514,8 +2514,7 @@ TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(
|
||||
Converted.size(),
|
||||
InstTemplateArgs,
|
||||
CanonType,
|
||||
0,
|
||||
ClassTemplate->getNextPartialSpecSequenceNumber());
|
||||
0);
|
||||
// Substitute the nested name specifier, if any.
|
||||
if (SubstQualifier(PartialSpec, InstPartialSpec))
|
||||
return 0;
|
||||
@ -2641,8 +2640,7 @@ TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(
|
||||
SemaRef.Context, Owner, PartialSpec->getInnerLocStart(),
|
||||
PartialSpec->getLocation(), InstParams, VarTemplate, DI->getType(),
|
||||
DI, PartialSpec->getStorageClass(), Converted.data(),
|
||||
Converted.size(), InstTemplateArgs,
|
||||
VarTemplate->getNextPartialSpecSequenceNumber());
|
||||
Converted.size(), InstTemplateArgs);
|
||||
|
||||
// Substitute the nested name specifier, if any.
|
||||
if (SubstQualifier(PartialSpec, InstPartialSpec))
|
||||
|
@ -1522,8 +1522,6 @@ ASTDeclReader::VisitClassTemplateSpecializationDeclImpl(
|
||||
if (D->isCanonicalDecl()) { // It's kept in the folding set.
|
||||
if (ClassTemplatePartialSpecializationDecl *Partial =
|
||||
dyn_cast<ClassTemplatePartialSpecializationDecl>(D)) {
|
||||
Partial->SequenceNumber =
|
||||
CanonPattern->getNextPartialSpecSequenceNumber();
|
||||
CanonPattern->getCommonPtr()->PartialSpecializations
|
||||
.GetOrInsertNode(Partial);
|
||||
} else {
|
||||
@ -1623,8 +1621,6 @@ ASTDeclReader::VisitVarTemplateSpecializationDeclImpl(
|
||||
if (D->isCanonicalDecl()) { // It's kept in the folding set.
|
||||
if (VarTemplatePartialSpecializationDecl *Partial =
|
||||
dyn_cast<VarTemplatePartialSpecializationDecl>(D)) {
|
||||
Partial->SequenceNumber =
|
||||
CanonPattern->getNextPartialSpecSequenceNumber();
|
||||
CanonPattern->getCommonPtr()->PartialSpecializations
|
||||
.GetOrInsertNode(Partial);
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user