Skip to content

Commit d658277

Browse files
committed
Temporarily revert partially applied concepts to simplify the diff
1 parent b93e741 commit d658277

28 files changed

+25
-551
lines changed

clang/include/clang/AST/ASTConcept.h

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -281,54 +281,6 @@ class TypeConstraint {
281281

282282
};
283283

284-
class PartiallyAppliedConcept : public ConceptReference,
285-
public llvm::FoldingSetNode {
286-
287-
SourceLocation ConceptKWLoc;
288-
PartiallyAppliedConcept(NestedNameSpecifierLoc NNS,
289-
DeclarationNameInfo ConceptNameInfo,
290-
SourceLocation ConceptKWLoc, NamedDecl *FoundDecl,
291-
TemplateDecl *NamedConcept,
292-
const ASTTemplateArgumentListInfo *ArgsAsWritten)
293-
: ConceptReference(NNS, /*TemplateKWLoc=*/SourceLocation(),
294-
ConceptNameInfo, FoundDecl, NamedConcept,
295-
ArgsAsWritten),
296-
ConceptKWLoc(ConceptKWLoc) {}
297-
298-
public:
299-
static PartiallyAppliedConcept *
300-
Create(const ASTContext &C, NestedNameSpecifierLoc NNS,
301-
DeclarationNameInfo ConceptNameInfo, SourceLocation ConceptKWLoc,
302-
NamedDecl *FoundDecl, TemplateDecl *NamedConcept,
303-
const TemplateArgumentListInfo &TemplateArgs);
304-
305-
TemplateArgumentDependence getDependence() const;
306-
307-
bool isDependent() const {
308-
return getDependence() & TemplateArgumentDependence::Dependent;
309-
}
310-
311-
bool isInstantiationDependent() const {
312-
return getDependence() & TemplateArgumentDependence::Instantiation;
313-
}
314-
315-
void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &C) const {
316-
Profile(ID, C, getNamedConcept(), getTemplateArgsAsWritten());
317-
}
318-
319-
static void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &C,
320-
const TemplateDecl *NamedConcept,
321-
const ASTTemplateArgumentListInfo *ArgsAsWritten);
322-
323-
SourceLocation getConceptKWLoc() const { return ConceptKWLoc; }
324-
325-
SourceRange getSourceRange() const {
326-
return {ConceptKWLoc, ArgsAsWritten->getRAngleLoc()};
327-
}
328-
329-
friend const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB,
330-
PartiallyAppliedConcept &C);
331-
};
332284

333285
} // clang
334286

clang/include/clang/AST/ASTContext.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ class ObjCTypeParamDecl;
9797
class OMPTraitInfo;
9898
class ParentMapContext;
9999
struct ParsedTargetAttr;
100-
class PartiallyAppliedConcept;
101100
class Preprocessor;
102101
class ProfileList;
103102
class StoredDeclsMap;

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -904,14 +904,6 @@ bool RecursiveASTVisitor<Derived>::TraverseTemplateArgument(
904904
case TemplateArgument::Pack:
905905
return getDerived().TraverseTemplateArguments(Arg.pack_elements());
906906

907-
case TemplateArgument::Concept: {
908-
PartiallyAppliedConcept *C = Arg.getAsPartiallyAppliedConcept();
909-
TRY_TO(getDerived().TraverseDecl(C->getNamedConcept()));
910-
for (const TemplateArgumentLoc &Arg :
911-
C->getTemplateArgsAsWritten()->arguments())
912-
TRY_TO(TraverseTemplateArgument(Arg.getArgument()));
913-
return true;
914-
}
915907
case TemplateArgument::Universal:
916908
case TemplateArgument::UniversalExpansion: {
917909
UniversalTemplateParameterName *UTPN =
@@ -965,14 +957,6 @@ bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLoc(
965957
case TemplateArgument::Pack:
966958
return getDerived().TraverseTemplateArguments(Arg.pack_elements());
967959

968-
case TemplateArgument::Concept: {
969-
PartiallyAppliedConcept *C = Arg.getAsPartiallyAppliedConcept();
970-
TRY_TO(getDerived().TraverseDecl(C->getNamedConcept()));
971-
for (const TemplateArgumentLoc &Arg :
972-
C->getTemplateArgsAsWritten()->arguments())
973-
TRY_TO(TraverseTemplateArgument(Arg.getArgument()));
974-
return true;
975-
}
976960
}
977961

978962
return true;

clang/include/clang/AST/TemplateArgumentVisitor.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class Base {
4242
DISPATCH(TemplateExpansion);
4343
DISPATCH(Expression);
4444
DISPATCH(Pack);
45-
DISPATCH(Concept);
4645
DISPATCH(Universal);
4746
DISPATCH(UniversalExpansion);
4847
}
@@ -68,7 +67,6 @@ class Base {
6867
VISIT_METHOD(TemplateExpansion);
6968
VISIT_METHOD(Expression);
7069
VISIT_METHOD(Pack);
71-
VISIT_METHOD(Concept);
7270
VISIT_METHOD(Universal);
7371
VISIT_METHOD(UniversalExpansion);
7472

clang/include/clang/AST/TemplateBase.h

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class Expr;
5858
struct PrintingPolicy;
5959
class TypeSourceInfo;
6060
class ValueDecl;
61-
class PartiallyAppliedConcept;
6261

6362
/// Represents a template argument.
6463
class TemplateArgument {
@@ -109,9 +108,6 @@ class TemplateArgument {
109108
/// in the Args struct.
110109
Pack,
111110

112-
// A concept with argument
113-
Concept,
114-
115111
/// The template argument refers to a universal template parameter
116112
Universal,
117113

@@ -183,12 +179,6 @@ class TemplateArgument {
183179
uintptr_t V;
184180
};
185181

186-
struct ConceptData {
187-
unsigned Kind : 31;
188-
unsigned IsDefaulted : 1;
189-
PartiallyAppliedConcept *C;
190-
};
191-
192182
struct UniversalTpl {
193183
unsigned Kind : 31;
194184
unsigned IsDefaulted : 1;
@@ -203,7 +193,6 @@ class TemplateArgument {
203193
struct A Args;
204194
struct TA TemplateArg;
205195
struct TV TypeOrValue;
206-
struct ConceptData PartialConcept;
207196
struct UniversalTpl UniversalArg;
208197
};
209198

@@ -311,13 +300,6 @@ class TemplateArgument {
311300
this->Args.NumArgs = Args.size();
312301
}
313302

314-
explicit TemplateArgument(PartiallyAppliedConcept *C,
315-
bool IsDefaulted = false) {
316-
PartialConcept.Kind = Concept;
317-
PartialConcept.IsDefaulted = IsDefaulted;
318-
PartialConcept.C = C;
319-
}
320-
321303
explicit TemplateArgument(UniversalTemplateParameterName *U,
322304
bool IsDefaulted = false) {
323305
UniversalArg.Kind = Universal;
@@ -411,11 +393,6 @@ class TemplateArgument {
411393
return TemplateName::getFromVoidPointer(TemplateArg.Name);
412394
}
413395

414-
PartiallyAppliedConcept *getAsPartiallyAppliedConcept() const {
415-
assert((getKind() == Concept) && "Unexpected kind");
416-
return PartialConcept.C;
417-
}
418-
419396
UniversalTemplateParameterName *getAsUniversalTemplateParameterName() const {
420397
assert((getKind() == Universal) && "Unexpected kind");
421398
return UniversalArg.D;
@@ -647,8 +624,7 @@ class TemplateArgumentLoc {
647624
: Argument(Argument),
648625
LocInfo(Ctx, QualifierLoc, TemplateNameLoc, EllipsisLoc) {
649626
assert(Argument.getKind() == TemplateArgument::Template ||
650-
Argument.getKind() == TemplateArgument::TemplateExpansion ||
651-
Argument.getKind() == TemplateArgument::Concept);
627+
Argument.getKind() == TemplateArgument::TemplateExpansion);
652628
}
653629

654630
TemplateArgumentLoc(ASTContext &Ctx, const TemplateArgument &Argument,
@@ -662,8 +638,7 @@ class TemplateArgumentLoc {
662638
/// - Fetches the primary location of the argument.
663639
SourceLocation getLocation() const {
664640
if (Argument.getKind() == TemplateArgument::Template ||
665-
Argument.getKind() == TemplateArgument::TemplateExpansion ||
666-
Argument.getKind() == TemplateArgument::Concept)
641+
Argument.getKind() == TemplateArgument::TemplateExpansion)
667642
return getTemplateNameLoc();
668643

669644
return getSourceRange().getBegin();
@@ -709,16 +684,14 @@ class TemplateArgumentLoc {
709684

710685
NestedNameSpecifierLoc getTemplateQualifierLoc() const {
711686
if (Argument.getKind() != TemplateArgument::Template &&
712-
Argument.getKind() != TemplateArgument::TemplateExpansion &&
713-
Argument.getKind() != TemplateArgument::Concept)
687+
Argument.getKind() != TemplateArgument::TemplateExpansion)
714688
return NestedNameSpecifierLoc();
715689
return LocInfo.getTemplateQualifierLoc();
716690
}
717691

718692
SourceLocation getTemplateNameLoc() const {
719693
if (Argument.getKind() != TemplateArgument::Template &&
720-
Argument.getKind() != TemplateArgument::TemplateExpansion &&
721-
Argument.getKind() != TemplateArgument::Concept)
694+
Argument.getKind() != TemplateArgument::TemplateExpansion)
722695
return SourceLocation();
723696
return LocInfo.getTemplateNameLoc();
724697
}

clang/include/clang/AST/TypeProperties.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ let Class = AutoType in {
508508
}
509509
def : Property<"typeConstraintConcept", Optional<TemplateDeclRef>> {
510510
let Read = [{ makeOptionalFromPointer(
511-
const_cast<const TemplateDecl*>(node->getTypeConstraintConcept())) }];
511+
node->getTypeConstraintConcept()) }];
512512
}
513513
def : Property<"typeConstraintArguments", Array<TemplateArgument>> {
514514
let Read = [{ node->getTypeConstraintArguments() }];

clang/include/clang/Parse/Parser.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3865,7 +3865,6 @@ class Parser : public CodeCompletionHandler {
38653865
bool IsClassName = false);
38663866
bool ParseTemplateArgumentList(TemplateArgList &TemplateArgs,
38673867
TemplateTy Template, SourceLocation OpenLoc);
3868-
ParsedTemplateArgument ParsePartiallyAppliedConceptTemplateArgument();
38693868
ParsedTemplateArgument ParseTemplateTemplateArgument();
38703869
ParsedTemplateArgument ParseUniversalTemplateParamNameArgument();
38713870
ParsedTemplateArgument ParseTemplateArgument();

clang/include/clang/Sema/ParsedTemplate.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include <new>
2727

2828
namespace clang {
29-
class PartiallyAppliedConcept;
3029

3130
/// Represents the parsed form of a C++ template argument.
3231
class ParsedTemplateArgument {
@@ -39,8 +38,6 @@ class ParsedTemplateArgument {
3938
NonType,
4039
/// A template template argument, stored as a template name.
4140
Template,
42-
/// A partially applied concept
43-
PartiallyAppliedConcept,
4441
/// The name of a Universal Template Parameter
4542
Universal
4643
};
@@ -71,11 +68,6 @@ class ParsedTemplateArgument {
7168
: Kind(ParsedTemplateArgument::Template), Arg(Template.getAsOpaquePtr()),
7269
SS(SS), Loc(TemplateLoc) {}
7370

74-
ParsedTemplateArgument(class PartiallyAppliedConcept *Concept,
75-
SourceLocation TemplateLoc)
76-
: Kind(ParsedTemplateArgument::PartiallyAppliedConcept), Arg(Concept),
77-
Loc(TemplateLoc) {}
78-
7971
ParsedTemplateArgument(UniversalTemplateParamNameTy ParamName,
8072
SourceLocation Loc)
8173
: Kind(ParsedTemplateArgument::Universal),
@@ -105,11 +97,6 @@ class ParsedTemplateArgument {
10597
return ParsedTemplateTy::getFromOpaquePtr(Arg);
10698
}
10799

108-
class PartiallyAppliedConcept *getAsConcept() const {
109-
assert(Kind == PartiallyAppliedConcept && "Not a concept argument");
110-
return reinterpret_cast<class PartiallyAppliedConcept *>(Arg);
111-
}
112-
113100
UniversalTemplateParamNameTy getAsUniversalTemplateParamName() const {
114101
assert(Kind == Universal &&
115102
"Not a reference to a universal template parameter");
@@ -122,7 +109,7 @@ class ParsedTemplateArgument {
122109
/// Retrieve the nested-name-specifier that precedes the template
123110
/// name in a template template argument.
124111
const CXXScopeSpec &getScopeSpec() const {
125-
assert((Kind == Template || Kind == PartiallyAppliedConcept) &&
112+
assert((Kind == Template) &&
126113
"Only template template arguments can have a scope specifier");
127114
return SS;
128115
}

clang/include/clang/Sema/Sema.h

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,6 @@ class Sema final : public SemaBase {
974974

975975
typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
976976
typedef OpaquePtr<TemplateName> TemplateTy;
977-
typedef OpaquePtr<PartiallyAppliedConcept> ConceptTy;
978977
typedef OpaquePtr<UniversalTemplateParameterName *>
979978
UniversalTemplateParamNameTy;
980979
typedef OpaquePtr<QualType> TypeTy;
@@ -11537,15 +11536,6 @@ class Sema final : public SemaBase {
1153711536
bool EnteringContext, TemplateTy &Template,
1153811537
bool AllowInjectedClassName = false);
1153911538

11540-
PartiallyAppliedConcept *BuildPartiallyAppliedConcept(
11541-
NestedNameSpecifierLoc NNS, SourceLocation ConceptKWLoc,
11542-
DeclarationNameInfo ConceptName, TemplateDecl *TD,
11543-
const TemplateArgumentListInfo &TemplateArgs);
11544-
PartiallyAppliedConcept *
11545-
ActOnPartiallyAppliedConcept(Scope *S, CXXScopeSpec &SS,
11546-
SourceLocation ConceptKWLoc,
11547-
TemplateIdAnnotation *TemplateId);
11548-
1154911539
bool
1155011540
ActOnUniversalTemplateParameterName(Scope *S, const UnqualifiedId &Name,
1155111541
bool EnteringContext,
@@ -11836,10 +11826,6 @@ class Sema final : public SemaBase {
1183611826
TemplateArgument &SugaredConverted,
1183711827
TemplateArgument &CanonicalConverted,
1183811828
CheckTemplateArgumentKind CTAK);
11839-
bool
11840-
CheckPartiallyAppliedConceptTemplateArgument(TemplateTemplateParmDecl *Param,
11841-
TemplateParameterList *Params,
11842-
TemplateArgumentLoc &Arg);
1184311829

1184411830
/// Check a template argument against its corresponding
1184511831
/// template template parameter.

clang/lib/AST/ASTConcept.cpp

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -113,55 +113,3 @@ void ConceptReference::print(llvm::raw_ostream &OS,
113113
OS << ">";
114114
}
115115
}
116-
117-
118-
PartiallyAppliedConcept *PartiallyAppliedConcept::Create(
119-
const ASTContext &C, NestedNameSpecifierLoc NNS,
120-
DeclarationNameInfo ConceptNameInfo, SourceLocation ConceptKWLoc,
121-
NamedDecl *FoundDecl, TemplateDecl *NamedConcept,
122-
const TemplateArgumentListInfo &TemplateArgs) {
123-
124-
return new (C) PartiallyAppliedConcept(
125-
NNS, ConceptNameInfo, ConceptKWLoc, FoundDecl, NamedConcept,
126-
ASTTemplateArgumentListInfo::Create(C, TemplateArgs));
127-
}
128-
129-
TemplateArgumentDependence PartiallyAppliedConcept::getDependence() const {
130-
auto TA = TemplateArgumentDependence::None;
131-
if (isa<TemplateTemplateParmDecl>(getNamedConcept())) {
132-
TA |= TemplateArgumentDependence::DependentInstantiation;
133-
}
134-
const auto InterestingDeps = TemplateArgumentDependence::Instantiation |
135-
TemplateArgumentDependence::UnexpandedPack;
136-
for (const TemplateArgumentLoc &ArgLoc :
137-
getTemplateArgsAsWritten()->arguments()) {
138-
TA |= ArgLoc.getArgument().getDependence() & InterestingDeps;
139-
if (TA == InterestingDeps)
140-
break;
141-
}
142-
return TA;
143-
}
144-
145-
void PartiallyAppliedConcept::Profile(
146-
llvm::FoldingSetNodeID &ID, const ASTContext &C,
147-
const TemplateDecl *NamedConcept,
148-
const ASTTemplateArgumentListInfo *ArgsAsWritten) {
149-
ID.AddPointer(NamedConcept);
150-
ID.AddInteger(ArgsAsWritten->getNumTemplateArgs());
151-
for (auto &Arg : ArgsAsWritten->arguments())
152-
Arg.getArgument().Profile(ID, C);
153-
}
154-
155-
const StreamingDiagnostic &clang::operator<<(const StreamingDiagnostic &DB,
156-
PartiallyAppliedConcept &C) {
157-
std::string NameStr;
158-
llvm::raw_string_ostream OS(NameStr);
159-
LangOptions LO;
160-
LO.CPlusPlus = true;
161-
LO.Bool = true;
162-
OS << '\'';
163-
C.print(OS, PrintingPolicy(LO));
164-
OS << '\'';
165-
OS.flush();
166-
return DB << NameStr;
167-
}

clang/lib/AST/ASTContext.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7308,10 +7308,6 @@ ASTContext::getCanonicalTemplateArgument(const TemplateArgument &Arg) const {
73087308
case TemplateArgument::Expression:
73097309
return Arg;
73107310

7311-
// FIXME corentin: do concept needs to be canonicalized?
7312-
case TemplateArgument::Concept:
7313-
return Arg;
7314-
73157311
case TemplateArgument::Declaration: {
73167312
auto *D = cast<ValueDecl>(Arg.getAsDecl()->getCanonicalDecl());
73177313
return TemplateArgument(D, getCanonicalType(Arg.getParamTypeForDecl()),

0 commit comments

Comments
 (0)