Skip to content

Commit b93e741

Browse files
committed
fix merge
1 parent 58cedbb commit b93e741

12 files changed

+84
-234
lines changed

clang/include/clang/AST/DeclTemplate.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,11 +1612,12 @@ class TemplateTemplateParmDecl final
16121612
: TemplateDecl(TemplateTemplateParm, DC, L, Id, Params),
16131613
TemplateParmPosition(D, P), Typename(Typename),
16141614
ParameterPack(ParameterPack),
1615-
ParameterKind(ParameterKind), ExpandedParameterPack(false) {}
1615+
ExpandedParameterPack(false), ParameterKind(ParameterKind) {}
16161616

16171617
TemplateTemplateParmDecl(DeclContext *DC, SourceLocation L, unsigned D,
16181618
unsigned P, IdentifierInfo *Id,
16191619
TemplateNameKind ParameterKind,
1620+
bool Typename,
16201621
TemplateParameterList *Params,
16211622
ArrayRef<TemplateParameterList *> Expansions);
16221623

@@ -1635,7 +1636,9 @@ class TemplateTemplateParmDecl final
16351636

16361637
static TemplateTemplateParmDecl *
16371638
Create(const ASTContext &C, DeclContext *DC, SourceLocation L, unsigned D,
1638-
unsigned P, IdentifierInfo *Id, bool Typename, TemplateNameKind ParameterKind,
1639+
unsigned P, IdentifierInfo *Id,
1640+
TemplateNameKind ParameterKind,
1641+
bool Typename,
16391642
TemplateParameterList *Params,
16401643
ArrayRef<TemplateParameterList *> Expansions);
16411644

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5269,7 +5269,7 @@ def err_partial_concept_valid_template : Error<
52695269
"name of template argument does not refer to concept, or concept "
52705270
"template parameter">;
52715271
def err_partial_concept_param_must_have_one_arg : Error<
5272-
"The corresponding template parameter of a partially applied concept must have exactly one argument">;
5272+
"the corresponding template parameter of a partially applied concept must have exactly one argument">;
52735273
def note_concept_template_parameter_declared_here : Error<
52745274
"concept template parameter declared here">;
52755275

clang/include/clang/Sema/Sema.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ class MangleNumberingContext;
147147
typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
148148
class ModuleLoader;
149149
class MultiLevelTemplateArgumentList;
150+
struct CachedNormalizedConstraint;
150151
struct NormalizedConstraint;
151152
class ObjCInterfaceDecl;
152153
class ObjCMethodDecl;
@@ -11303,7 +11304,9 @@ class Sema final : public SemaBase {
1130311304
/// parameter (e.g. T in template <template \<typename> class T> class array)
1130411305
/// has been parsed. S is the current scope.
1130511306
NamedDecl *ActOnTemplateTemplateParameter(
11306-
Scope *S, SourceLocation TmpLoc, TemplateNameKind Kind,
11307+
Scope *S, SourceLocation TmpLoc,
11308+
TemplateNameKind Kind,
11309+
bool TypenameKeyword,
1130711310
TemplateParameterList *Params, SourceLocation EllipsisLoc,
1130811311
IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth,
1130911312
unsigned Position, SourceLocation EqualLoc,
@@ -12135,7 +12138,7 @@ class Sema final : public SemaBase {
1213512138

1213612139
void CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous,
1213712140
bool &AddToScope);
12138-
bool CheckConceptUseInDefinition(ConceptDecl *Concept, SourceLocation Loc);
12141+
bool CheckConceptUseInDefinition(NamedDecl *Concept, SourceLocation Loc);
1213912142

1214012143
TypeResult ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1214112144
const CXXScopeSpec &SS,
@@ -14575,9 +14578,7 @@ class Sema final : public SemaBase {
1457514578
bool First = true);
1457614579

1457714580
const NormalizedConstraint *getNormalizedAssociatedConstraints(NamedDecl *ConstrainedDecl,
14578-
ArrayRef<const Expr *> AssociatedConstraints,
14579-
std::optional<ArrayRef<TemplateArgument> > TemplateArgs = std::nullopt, bool TopLevel = false,
14580-
AtomicConstraint::FoldKind FK = AtomicConstraint::FoldKind::FoldNone);
14581+
ArrayRef<const Expr *> AssociatedConstraints);
1458114582

1458214583
/// \brief Check whether the given declaration's associated constraints are
1458314584
/// at least as constrained than another declaration's according to the
@@ -14608,7 +14609,7 @@ class Sema final : public SemaBase {
1460814609
/// constrained declarations). If an error occurred while normalizing the
1460914610
/// associated constraints of the template or concept, nullptr will be cached
1461014611
/// here.
14611-
llvm::FoldingSet<CachedNormalizedConstraint> NormalizationCache;
14612+
llvm::DenseMap<NamedDecl *, NormalizedConstraint *> NormalizationCache;
1461214613

1461314614
llvm::ContextualFoldingSet<ConstraintSatisfaction, const ASTContext &>
1461414615
SatisfactionCache;

clang/include/clang/Sema/SemaConcept.h

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ struct alignas(ConstraintAlignment) AtomicConstraint {
4747

4848
for (unsigned I = 0, S = ParameterMapping->size(); I < S; ++I) {
4949
llvm::FoldingSetNodeID IDA, IDB;
50-
if ((*ParameterMapping)[I]
51-
.getArgument()
52-
.isConceptOrConceptTemplateParameter())
53-
continue;
5450
C.getCanonicalTemplateArgument((*ParameterMapping)[I].getArgument())
5551
.Profile(IDA, C);
5652
C.getCanonicalTemplateArgument((*Other.ParameterMapping)[I].getArgument())
@@ -77,9 +73,6 @@ struct alignas(ConstraintAlignment) AtomicConstraint {
7773
if (ConstraintExpr != Other.ConstraintExpr)
7874
return false;
7975

80-
if (!isCompatibleFold(Other))
81-
return false;
82-
8376
// Check that the parameter lists are identical
8477
return hasMatchingParameterMapping(C, Other);
8578
}
@@ -162,39 +155,17 @@ struct NormalizedConstraint {
162155
return Constraint.get<AtomicConstraint *>();
163156
}
164157

165-
void dump() {
166-
if (isAtomic()) {
167-
llvm::outs() << getAtomicConstraint()->ConstraintExpr;
168-
return;
169-
}
170-
getLHS().dump();
171-
llvm::outs() << "\n";
172-
llvm::outs() << (getCompoundKind() ==
173-
CompoundConstraintKind::CCK_Conjunction
174-
? "&&"
175-
: "||")
176-
<< "\n";
177-
getRHS().dump();
178-
llvm::outs() << "\n";
179-
}
180-
181158
FoldExpandedConstraint *getFoldExpandedConstraint() const {
182159
assert(isFoldExpanded() &&
183160
"getFoldExpandedConstraint called on non-fold-expanded constraint.");
184161
return Constraint.get<FoldExpandedConstraint *>();
185162
}
186163

187164
private:
188-
static std::optional<NormalizedConstraint> fromConstraintExprs(
189-
Sema &S, NamedDecl *D, ArrayRef<const Expr *> E,
190-
std::optional<ArrayRef<TemplateArgument>> TemplateArgs,
191-
AtomicConstraint::FoldKind FK = AtomicConstraint::FoldKind::FoldNone);
192-
static std::optional<NormalizedConstraint> fromConstraintExpr(Sema &S, NamedDecl *D, const Expr *E,
193-
std::optional<ArrayRef<TemplateArgument>> TemplateArgs = std::nullopt,
194-
AtomicConstraint::FoldKind FK = AtomicConstraint::FoldKind::FoldNone);
195-
196-
protected:
197-
NormalizedConstraint() = default;
165+
static std::optional<NormalizedConstraint>
166+
fromConstraintExprs(Sema &S, NamedDecl *D, ArrayRef<const Expr *> E);
167+
static std::optional<NormalizedConstraint>
168+
fromConstraintExpr(Sema &S, NamedDecl *D, const Expr *E);
198169
};
199170

200171
struct alignas(ConstraintAlignment) NormalizedConstraintPair {

clang/lib/AST/ASTImporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6040,7 +6040,7 @@ ASTNodeImporter::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
60406040
ToD, D, Importer.getToContext(),
60416041
Importer.getToContext().getTranslationUnitDecl(), *LocationOrErr,
60426042
D->getDepth(), D->getPosition(), D->isParameterPack(),
6043-
(*NameOrErr).getAsIdentifierInfo(), D->kind(), *TemplateParamsOrErr))
6043+
(*NameOrErr).getAsIdentifierInfo(), D->kind(), D->wasDeclaredWithTypename(), *TemplateParamsOrErr))
60446044
return ToD;
60456045

60466046
if (Error Err = importTemplateParameterDefaultArgument(D, ToD))

clang/lib/AST/DeclTemplate.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C,
101101
}
102102
}
103103

104+
}
105+
104106
bool TemplateParameterList::containsUnexpandedParameterPack() const {
105107
if (ContainsUnexpandedParameterPack)
106108
return true;
@@ -840,7 +842,8 @@ void TemplateTemplateParmDecl::anchor() {}
840842

841843
TemplateTemplateParmDecl::TemplateTemplateParmDecl(
842844
DeclContext *DC, SourceLocation L, unsigned D, unsigned P,
843-
IdentifierInfo *Id, TemplateNameKind Kind, TemplateParameterList *Params,
845+
IdentifierInfo *Id, TemplateNameKind Kind, bool Typename,
846+
TemplateParameterList *Params,
844847
ArrayRef<TemplateParameterList *> Expansions)
845848
: TemplateDecl(TemplateTemplateParm, DC, L, Id, Params),
846849
TemplateParmPosition(D, P), Typename(Typename), ParameterPack(true),
@@ -853,28 +856,29 @@ TemplateTemplateParmDecl::TemplateTemplateParmDecl(
853856

854857
TemplateTemplateParmDecl *TemplateTemplateParmDecl::Create(
855858
const ASTContext &C, DeclContext *DC, SourceLocation L, unsigned D,
856-
unsigned P, bool ParameterPack, IdentifierInfo *Id, bool Typename, TemplateNameKind Kind,
859+
unsigned P, bool ParameterPack, IdentifierInfo *Id, TemplateNameKind Kind,
860+
bool Typename,
857861
TemplateParameterList *Params) {
858862
return new (C, DC)
859-
TemplateTemplateParmDecl(DC, L, D, P, ParameterPack, Id, Typename, Kind, Params);
863+
TemplateTemplateParmDecl(DC, L, D, P, ParameterPack, Id, Kind, Typename, Params);
860864
}
861865

862866
TemplateTemplateParmDecl *
863867
TemplateTemplateParmDecl::Create(const ASTContext &C, DeclContext *DC,
864868
SourceLocation L, unsigned D, unsigned P,
865-
IdentifierInfo *Id, bool Typename, TemplateNameKind Kind,
869+
IdentifierInfo *Id, TemplateNameKind Kind, bool Typename,
866870
TemplateParameterList *Params,
867871
ArrayRef<TemplateParameterList *> Expansions) {
868872
return new (C, DC,
869873
additionalSizeToAlloc<TemplateParameterList *>(Expansions.size()))
870-
TemplateTemplateParmDecl(DC, L, D, P, Id, Typename, Kind, Params, Expansions);
874+
TemplateTemplateParmDecl(DC, L, D, P, Id, Kind, Typename, Params, Expansions);
871875
}
872876

873877
TemplateTemplateParmDecl *
874-
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
878+
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID) {
875879
return new (C, ID)
876-
TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0, false, nullptr,
877-
false, TemplateNameKind::TNK_Type_template, nullptr);
880+
TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0, nullptr,
881+
TemplateNameKind::TNK_Type_template, false, nullptr, std::nullopt);
878882
}
879883

880884
TemplateTemplateParmDecl *
@@ -883,7 +887,7 @@ TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID,
883887
auto *TTP =
884888
new (C, ID, additionalSizeToAlloc<TemplateParameterList *>(NumExpansions))
885889
TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0, nullptr,
886-
false, TemplateNameKind::TNK_Type_template, nullptr,
890+
TemplateNameKind::TNK_Type_template, false, nullptr,
887891
std::nullopt);
888892
TTP->NumExpandedParams = NumExpansions;
889893
return TTP;
@@ -1582,7 +1586,8 @@ createMakeIntegerSeqParameterList(const ASTContext &C, DeclContext *DC) {
15821586
auto *TemplateTemplateParm = TemplateTemplateParmDecl::Create(
15831587
C, DC, SourceLocation(), /*Depth=*/0, /*Position=*/0,
15841588
/*ParameterPack=*/false, /*Id=*/nullptr,
1585-
/*Typename=*/false, TemplateNameKind::TNK_Type_template, TPL);
1589+
TemplateNameKind::TNK_Type_template,
1590+
/*Typename=*/false, TPL);
15861591
TemplateTemplateParm->setImplicit(true);
15871592

15881593
// typename T
@@ -1644,6 +1649,7 @@ static TemplateParameterList *createBuiltinCommonTypeList(const ASTContext &C,
16441649
auto *BaseTemplate = TemplateTemplateParmDecl::Create(
16451650
C, DC, SourceLocation(), /*Depth=*/0, /*Position=*/0,
16461651
/*ParameterPack=*/false, /*Id=*/nullptr,
1652+
TemplateNameKind::TNK_Type_template,
16471653
/*Typename=*/false, BaseTemplateList);
16481654

16491655
// class TypeMember
@@ -1661,6 +1667,7 @@ static TemplateParameterList *createBuiltinCommonTypeList(const ASTContext &C,
16611667
auto *HasTypeMember = TemplateTemplateParmDecl::Create(
16621668
C, DC, SourceLocation(), /*Depth=*/0, /*Position=*/1,
16631669
/*ParameterPack=*/false, /*Id=*/nullptr,
1670+
TemplateNameKind::TNK_Type_template,
16641671
/*Typename=*/false, HasTypeMemberList);
16651672

16661673
// class HasNoTypeMember

clang/lib/Sema/SemaChecking.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "clang/AST/RecordLayout.h"
3535
#include "clang/AST/Stmt.h"
3636
#include "clang/AST/TemplateBase.h"
37+
#include "clang/AST/TemplateName.h"
3738
#include "clang/AST/Type.h"
3839
#include "clang/AST/TypeLoc.h"
3940
#include "clang/AST/UnresolvedSet.h"
@@ -3389,7 +3390,7 @@ void Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
33893390
}
33903391

33913392
void Sema::CheckConstrainedAuto(const AutoType *AutoT, SourceLocation Loc) {
3392-
if (ConceptDecl *Decl = AutoT->getTypeConstraintConcept()) {
3393+
if (TemplateDecl *Decl = AutoT->getTypeConstraintConcept()) {
33933394
DiagnoseUseOfDecl(Decl, Loc);
33943395
}
33953396
}

0 commit comments

Comments
 (0)