Skip to content

Commit bae97e1

Browse files
Revert "[clang] fix P3310 overload resolution flag propagation" (#125710)
Reverts #125372 due to lldb builds failing: https://lab.llvm.org/buildbot/#/builders/59/builds/12223 We need to decide how to update LLDB's code.
1 parent 5eff19f commit bae97e1

15 files changed

+44
-6141
lines changed

clang/include/clang/AST/DeclTemplate.h

+2-14
Original file line numberDiff line numberDiff line change
@@ -1841,23 +1841,15 @@ class ClassTemplateSpecializationDecl : public CXXRecordDecl,
18411841
LLVM_PREFERRED_TYPE(TemplateSpecializationKind)
18421842
unsigned SpecializationKind : 3;
18431843

1844-
/// Indicate that we have matched a parameter pack with a non pack
1845-
/// argument, when the opposite match is also allowed (strict pack match).
1846-
/// This needs to be cached as deduction is performed during declaration,
1847-
/// and we need the information to be preserved so that it is consistent
1848-
/// during instantiation.
1849-
bool MatchedPackOnParmToNonPackOnArg : 1;
1850-
18511844
protected:
18521845
ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, TagKind TK,
18531846
DeclContext *DC, SourceLocation StartLoc,
18541847
SourceLocation IdLoc,
18551848
ClassTemplateDecl *SpecializedTemplate,
18561849
ArrayRef<TemplateArgument> Args,
1857-
bool MatchedPackOnParmToNonPackOnArg,
18581850
ClassTemplateSpecializationDecl *PrevDecl);
18591851

1860-
ClassTemplateSpecializationDecl(ASTContext &C, Kind DK);
1852+
explicit ClassTemplateSpecializationDecl(ASTContext &C, Kind DK);
18611853

18621854
public:
18631855
friend class ASTDeclReader;
@@ -1867,7 +1859,7 @@ class ClassTemplateSpecializationDecl : public CXXRecordDecl,
18671859
Create(ASTContext &Context, TagKind TK, DeclContext *DC,
18681860
SourceLocation StartLoc, SourceLocation IdLoc,
18691861
ClassTemplateDecl *SpecializedTemplate,
1870-
ArrayRef<TemplateArgument> Args, bool MatchedPackOnParmToNonPackOnArg,
1862+
ArrayRef<TemplateArgument> Args,
18711863
ClassTemplateSpecializationDecl *PrevDecl);
18721864
static ClassTemplateSpecializationDecl *CreateDeserialized(ASTContext &C,
18731865
GlobalDeclID ID);
@@ -1938,10 +1930,6 @@ class ClassTemplateSpecializationDecl : public CXXRecordDecl,
19381930
SpecializationKind = TSK;
19391931
}
19401932

1941-
bool hasMatchedPackOnParmToNonPackOnArg() const {
1942-
return MatchedPackOnParmToNonPackOnArg;
1943-
}
1944-
19451933
/// Get the point of instantiation (if any), or null if none.
19461934
SourceLocation getPointOfInstantiation() const {
19471935
return PointOfInstantiation;

clang/include/clang/Sema/Sema.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -13499,8 +13499,8 @@ class Sema final : public SemaBase {
1349913499
bool InstantiateClassTemplateSpecialization(
1350013500
SourceLocation PointOfInstantiation,
1350113501
ClassTemplateSpecializationDecl *ClassTemplateSpec,
13502-
TemplateSpecializationKind TSK, bool Complain,
13503-
bool PrimaryHasMatchedPackOnParmToNonPackOnArg);
13502+
TemplateSpecializationKind TSK, bool Complain = true,
13503+
bool PrimaryHasMatchedPackOnParmToNonPackOnArg = false);
1350413504

1350513505
/// Instantiates the definitions of all of the member
1350613506
/// of the given class, which is an instantiation of a class template

clang/lib/AST/ASTImporter.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -6321,9 +6321,9 @@ ExpectedDecl ASTNodeImporter::VisitClassTemplateSpecializationDecl(
63216321
updateLookupTableForTemplateParameters(*ToTPList);
63226322
} else { // Not a partial specialization.
63236323
if (GetImportedOrCreateDecl(
6324-
D2, D, Importer.getToContext(), D->getTagKind(), DC, *BeginLocOrErr,
6325-
*IdLocOrErr, ClassTemplate, TemplateArgs,
6326-
D->hasMatchedPackOnParmToNonPackOnArg(), PrevDecl))
6324+
D2, D, Importer.getToContext(), D->getTagKind(), DC,
6325+
*BeginLocOrErr, *IdLocOrErr, ClassTemplate, TemplateArgs,
6326+
PrevDecl))
63276327
return D2;
63286328

63296329
// Update InsertPos, because preceding import calls may have invalidated

clang/lib/AST/DeclTemplate.cpp

+23-24
Original file line numberDiff line numberDiff line change
@@ -957,20 +957,18 @@ FunctionTemplateSpecializationInfo *FunctionTemplateSpecializationInfo::Create(
957957
// ClassTemplateSpecializationDecl Implementation
958958
//===----------------------------------------------------------------------===//
959959

960-
ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(
961-
ASTContext &Context, Kind DK, TagKind TK, DeclContext *DC,
962-
SourceLocation StartLoc, SourceLocation IdLoc,
963-
ClassTemplateDecl *SpecializedTemplate, ArrayRef<TemplateArgument> Args,
964-
bool MatchedPackOnParmToNonPackOnArg,
965-
ClassTemplateSpecializationDecl *PrevDecl)
960+
ClassTemplateSpecializationDecl::
961+
ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, TagKind TK,
962+
DeclContext *DC, SourceLocation StartLoc,
963+
SourceLocation IdLoc,
964+
ClassTemplateDecl *SpecializedTemplate,
965+
ArrayRef<TemplateArgument> Args,
966+
ClassTemplateSpecializationDecl *PrevDecl)
966967
: CXXRecordDecl(DK, TK, Context, DC, StartLoc, IdLoc,
967968
SpecializedTemplate->getIdentifier(), PrevDecl),
968-
SpecializedTemplate(SpecializedTemplate),
969-
TemplateArgs(TemplateArgumentList::CreateCopy(Context, Args)),
970-
SpecializationKind(TSK_Undeclared),
971-
MatchedPackOnParmToNonPackOnArg(MatchedPackOnParmToNonPackOnArg) {
972-
assert(DK == Kind::ClassTemplateSpecialization ||
973-
MatchedPackOnParmToNonPackOnArg == false);
969+
SpecializedTemplate(SpecializedTemplate),
970+
TemplateArgs(TemplateArgumentList::CreateCopy(Context, Args)),
971+
SpecializationKind(TSK_Undeclared) {
974972
}
975973

976974
ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(ASTContext &C,
@@ -979,14 +977,18 @@ ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(ASTContext &C,
979977
SourceLocation(), nullptr, nullptr),
980978
SpecializationKind(TSK_Undeclared) {}
981979

982-
ClassTemplateSpecializationDecl *ClassTemplateSpecializationDecl::Create(
983-
ASTContext &Context, TagKind TK, DeclContext *DC, SourceLocation StartLoc,
984-
SourceLocation IdLoc, ClassTemplateDecl *SpecializedTemplate,
985-
ArrayRef<TemplateArgument> Args, bool MatchedPackOnParmToNonPackOnArg,
986-
ClassTemplateSpecializationDecl *PrevDecl) {
987-
auto *Result = new (Context, DC) ClassTemplateSpecializationDecl(
988-
Context, ClassTemplateSpecialization, TK, DC, StartLoc, IdLoc,
989-
SpecializedTemplate, Args, MatchedPackOnParmToNonPackOnArg, PrevDecl);
980+
ClassTemplateSpecializationDecl *
981+
ClassTemplateSpecializationDecl::Create(ASTContext &Context, TagKind TK,
982+
DeclContext *DC,
983+
SourceLocation StartLoc,
984+
SourceLocation IdLoc,
985+
ClassTemplateDecl *SpecializedTemplate,
986+
ArrayRef<TemplateArgument> Args,
987+
ClassTemplateSpecializationDecl *PrevDecl) {
988+
auto *Result =
989+
new (Context, DC) ClassTemplateSpecializationDecl(
990+
Context, ClassTemplateSpecialization, TK, DC, StartLoc, IdLoc,
991+
SpecializedTemplate, Args, PrevDecl);
990992
Result->setMayHaveOutOfDateDef(false);
991993

992994
// If the template decl is incomplete, copy the external lexical storage from
@@ -1173,10 +1175,7 @@ ClassTemplatePartialSpecializationDecl::ClassTemplatePartialSpecializationDecl(
11731175
ClassTemplatePartialSpecializationDecl *PrevDecl)
11741176
: ClassTemplateSpecializationDecl(
11751177
Context, ClassTemplatePartialSpecialization, TK, DC, StartLoc, IdLoc,
1176-
// Tracking MatchedPackOnParmToNonPackOnArg for Partial
1177-
// Specializations is not needed.
1178-
SpecializedTemplate, Args, /*MatchedPackOnParmToNonPackOnArg=*/false,
1179-
PrevDecl),
1178+
SpecializedTemplate, Args, PrevDecl),
11801179
TemplateParams(Params), InstantiatedFromMember(nullptr, false) {
11811180
if (AdoptTemplateParameterList(Params, this))
11821181
setInvalidDecl();

clang/lib/AST/JSONNodeDumper.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -1003,11 +1003,6 @@ void JSONNodeDumper::VisitRecordDecl(const RecordDecl *RD) {
10031003
void JSONNodeDumper::VisitCXXRecordDecl(const CXXRecordDecl *RD) {
10041004
VisitRecordDecl(RD);
10051005

1006-
if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
1007-
if (CTSD->hasMatchedPackOnParmToNonPackOnArg())
1008-
JOS.attribute("strict-pack-match", true);
1009-
}
1010-
10111006
// All other information requires a complete definition.
10121007
if (!RD->isCompleteDefinition())
10131008
return;

clang/lib/AST/TextNodeDumper.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -2525,11 +2525,8 @@ void TextNodeDumper::VisitCXXRecordDecl(const CXXRecordDecl *D) {
25252525
OS << " instantiated_from";
25262526
dumpPointer(Instance);
25272527
}
2528-
if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
2528+
if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
25292529
dumpTemplateSpecializationKind(CTSD->getSpecializationKind());
2530-
if (CTSD->hasMatchedPackOnParmToNonPackOnArg())
2531-
OS << " strict-pack-match";
2532-
}
25332530

25342531
dumpNestedNameSpecifier(D->getQualifier());
25352532

clang/lib/Sema/SemaTemplate.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -3651,7 +3651,7 @@ QualType Sema::CheckTemplateIdType(TemplateName Name,
36513651
ClassTemplate->getDeclContext(),
36523652
ClassTemplate->getTemplatedDecl()->getBeginLoc(),
36533653
ClassTemplate->getLocation(), ClassTemplate, CTAI.CanonicalConverted,
3654-
CTAI.MatchedPackOnParmToNonPackOnArg, nullptr);
3654+
nullptr);
36553655
ClassTemplate->AddSpecialization(Decl, InsertPos);
36563656
if (ClassTemplate->isOutOfLine())
36573657
Decl->setLexicalDeclContext(ClassTemplate->getLexicalDeclContext());
@@ -8526,8 +8526,7 @@ DeclResult Sema::ActOnClassTemplateSpecialization(
85268526
// this explicit specialization or friend declaration.
85278527
Specialization = ClassTemplateSpecializationDecl::Create(
85288528
Context, Kind, DC, KWLoc, TemplateNameLoc, ClassTemplate,
8529-
CTAI.CanonicalConverted, CTAI.MatchedPackOnParmToNonPackOnArg,
8530-
PrevDecl);
8529+
CTAI.CanonicalConverted, PrevDecl);
85318530
Specialization->setTemplateArgsAsWritten(TemplateArgs);
85328531
SetNestedNameSpecifier(*this, Specialization, SS);
85338532
if (TemplateParameterLists.size() > 0) {
@@ -9870,8 +9869,7 @@ DeclResult Sema::ActOnExplicitInstantiation(
98709869
// this explicit specialization.
98719870
Specialization = ClassTemplateSpecializationDecl::Create(
98729871
Context, Kind, ClassTemplate->getDeclContext(), KWLoc, TemplateNameLoc,
9873-
ClassTemplate, CTAI.CanonicalConverted,
9874-
CTAI.MatchedPackOnParmToNonPackOnArg, PrevDecl);
9872+
ClassTemplate, CTAI.CanonicalConverted, PrevDecl);
98759873
SetNestedNameSpecifier(*this, Specialization, SS);
98769874

98779875
// A MSInheritanceAttr attached to the previous declaration must be

clang/lib/Sema/SemaTemplateDeduction.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -3341,6 +3341,8 @@ FinishTemplateArgumentDeduction(
33413341
return ConstraintsNotSatisfied
33423342
? TemplateDeductionResult::ConstraintsNotSatisfied
33433343
: TemplateDeductionResult::SubstitutionFailure;
3344+
if (InstCTAI.MatchedPackOnParmToNonPackOnArg)
3345+
Info.setMatchedPackOnParmToNonPackOnArg();
33443346

33453347
TemplateParameterList *TemplateParams = Template->getTemplateParameters();
33463348
for (unsigned I = 0, E = TemplateParams->size(); I != E; ++I) {

clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -4038,7 +4038,7 @@ TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(
40384038
ClassTemplateSpecializationDecl::Create(
40394039
SemaRef.Context, D->getTagKind(), Owner, D->getBeginLoc(),
40404040
D->getLocation(), InstClassTemplate, CTAI.CanonicalConverted,
4041-
CTAI.MatchedPackOnParmToNonPackOnArg, PrevDecl);
4041+
PrevDecl);
40424042
InstD->setTemplateArgsAsWritten(InstTemplateArgs);
40434043

40444044
// Add this partial specialization to the set of class template partial

clang/lib/Sema/SemaType.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -9399,8 +9399,7 @@ bool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
93999399
runWithSufficientStackSpace(Loc, [&] {
94009400
Diagnosed = InstantiateClassTemplateSpecialization(
94019401
Loc, ClassTemplateSpec, TSK_ImplicitInstantiation,
9402-
/*Complain=*/Diagnoser,
9403-
ClassTemplateSpec->hasMatchedPackOnParmToNonPackOnArg());
9402+
/*Complain=*/Diagnoser);
94049403
});
94059404
Instantiated = true;
94069405
}

clang/lib/Serialization/ASTReaderDecl.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -2532,7 +2532,6 @@ RedeclarableResult ASTDeclReader::VisitClassTemplateSpecializationDeclImpl(
25322532
D->TemplateArgs = TemplateArgumentList::CreateCopy(C, TemplArgs);
25332533
D->PointOfInstantiation = readSourceLocation();
25342534
D->SpecializationKind = (TemplateSpecializationKind)Record.readInt();
2535-
D->MatchedPackOnParmToNonPackOnArg = Record.readBool();
25362535

25372536
bool writtenAsCanonicalDecl = Record.readInt();
25382537
if (writtenAsCanonicalDecl) {

clang/lib/Serialization/ASTWriterDecl.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -1843,7 +1843,6 @@ void ASTDeclWriter::VisitClassTemplateSpecializationDecl(
18431843
Record.AddTemplateArgumentList(&D->getTemplateArgs());
18441844
Record.AddSourceLocation(D->getPointOfInstantiation());
18451845
Record.push_back(D->getSpecializationKind());
1846-
Record.push_back(D->hasMatchedPackOnParmToNonPackOnArg());
18471846
Record.push_back(D->isCanonicalDecl());
18481847

18491848
if (D->isCanonicalDecl()) {

0 commit comments

Comments
 (0)