Skip to content

Commit 54f132c

Browse files
committed
[GSB] Delete all of the "visited" sets, which are now unused.
Now that we detect recursion based on repetition within the potential archetypes, we no longer rely on passing down "visited" sets to detect/diagnose recursion. Remove them.
1 parent a5a162a commit 54f132c

File tree

2 files changed

+11
-57
lines changed

2 files changed

+11
-57
lines changed

include/swift/AST/GenericSignatureBuilder.h

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,6 @@ class GenericSignatureBuilder {
267267
ProtocolDecl *Proto,
268268
const RequirementSource *Source);
269269

270-
ConstraintResult addConformanceRequirement(
271-
PotentialArchetype *T,
272-
ProtocolDecl *Proto,
273-
const RequirementSource *Source,
274-
llvm::SmallPtrSetImpl<ProtocolDecl *> &Visited);
275-
276270
public:
277271
/// \brief Add a new same-type requirement between two fully resolved types
278272
/// (output of \c GenericSignatureBuilder::resolve).
@@ -338,9 +332,7 @@ class GenericSignatureBuilder {
338332
UnresolvedType subject,
339333
UnresolvedType constraint,
340334
FloatingRequirementSource source,
341-
UnresolvedHandlingKind unresolvedHandling,
342-
llvm::SmallPtrSetImpl<ProtocolDecl *> *visited
343-
= nullptr);
335+
UnresolvedHandlingKind unresolvedHandling);
344336

345337
/// \brief Add a new conformance requirement specifying that the given
346338
/// potential archetypes are equivalent.
@@ -388,7 +380,6 @@ class GenericSignatureBuilder {
388380
TypeDecl *decl,
389381
UnresolvedType type,
390382
const RequirementSource *parentSource,
391-
llvm::SmallPtrSetImpl<ProtocolDecl *> &visited,
392383
ModuleDecl *inferForModule);
393384

394385
/// Visit all of the potential archetypes.
@@ -480,13 +471,6 @@ class GenericSignatureBuilder {
480471
ModuleDecl *inferForModule,
481472
const SubstitutionMap *subMap = nullptr);
482473

483-
ConstraintResult addRequirement(
484-
const Requirement &req,
485-
FloatingRequirementSource source,
486-
ModuleDecl *inferForModule,
487-
const SubstitutionMap *subMap,
488-
llvm::SmallPtrSetImpl<ProtocolDecl *> &Visited);
489-
490474
/// \brief Add all of a generic signature's parameters and requirements.
491475
void addGenericSignature(GenericSignature *sig);
492476

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,9 +2273,8 @@ bool GenericSignatureBuilder::addGenericParameterRequirements(
22732273
auto PA = Impl->PotentialArchetypes[Key.findIndexIn(Impl->GenericParams)];
22742274

22752275
// Add the requirements from the declaration.
2276-
llvm::SmallPtrSet<ProtocolDecl *, 8> visited;
22772276
return isErrorResult(
2278-
addInheritedRequirements(GenericParam, PA, nullptr, visited,
2277+
addInheritedRequirements(GenericParam, PA, nullptr,
22792278
GenericParam->getModuleContext()));
22802279
}
22812280

@@ -2293,14 +2292,6 @@ void GenericSignatureBuilder::addGenericParameter(GenericTypeParamType *GenericP
22932292
Impl->PotentialArchetypes.push_back(PA);
22942293
}
22952294

2296-
ConstraintResult GenericSignatureBuilder::addConformanceRequirement(
2297-
PotentialArchetype *PAT,
2298-
ProtocolDecl *Proto,
2299-
const RequirementSource *Source) {
2300-
llvm::SmallPtrSet<ProtocolDecl *, 8> Visited;
2301-
return addConformanceRequirement(PAT, Proto, Source, Visited);
2302-
}
2303-
23042295
/// Visit all of the types that show up in the list of inherited
23052296
/// types.
23062297
static ConstraintResult visitInherited(
@@ -2349,8 +2340,7 @@ static ConstraintResult visitInherited(
23492340
ConstraintResult GenericSignatureBuilder::addConformanceRequirement(
23502341
PotentialArchetype *PAT,
23512342
ProtocolDecl *Proto,
2352-
const RequirementSource *Source,
2353-
llvm::SmallPtrSetImpl<ProtocolDecl *> &Visited) {
2343+
const RequirementSource *Source) {
23542344
// Add the requirement, if we haven't done so already.
23552345
if (!PAT->addConformance(Proto, Source, *this))
23562346
return ConstraintResult::Resolved;
@@ -2370,7 +2360,7 @@ ConstraintResult GenericSignatureBuilder::addConformanceRequirement(
23702360
/*inferred=*/false);
23712361
for (auto req : reqSig->getRequirements()) {
23722362
auto reqResult = addRequirement(req, innerSource, nullptr,
2373-
&protocolSubMap, Visited);
2363+
&protocolSubMap);
23742364
if (isErrorResult(reqResult)) return reqResult;
23752365
}
23762366

@@ -2384,7 +2374,7 @@ ConstraintResult GenericSignatureBuilder::addConformanceRequirement(
23842374
auto protoModule = Proto->getParentModule();
23852375

23862376
auto inheritedReqResult =
2387-
addInheritedRequirements(Proto, PAT, Source, Visited, protoModule);
2377+
addInheritedRequirements(Proto, PAT, Source, protoModule);
23882378
if (isErrorResult(inheritedReqResult))
23892379
return inheritedReqResult;
23902380

@@ -2403,8 +2393,7 @@ ConstraintResult GenericSignatureBuilder::addConformanceRequirement(
24032393
// Add requirements placed directly on this associated type.
24042394
Type assocType = DependentMemberType::get(concreteSelf, AssocType);
24052395
auto assocResult =
2406-
addInheritedRequirements(AssocType, assocType, Source, Visited,
2407-
protoModule);
2396+
addInheritedRequirements(AssocType, assocType, Source, protoModule);
24082397
if (isErrorResult(assocResult))
24092398
return assocResult;
24102399

@@ -2581,13 +2570,7 @@ ConstraintResult GenericSignatureBuilder::addTypeRequirement(
25812570
UnresolvedType subject,
25822571
UnresolvedType constraint,
25832572
FloatingRequirementSource source,
2584-
UnresolvedHandlingKind unresolvedHandling,
2585-
llvm::SmallPtrSetImpl<ProtocolDecl *> *visited) {
2586-
// Make sure we always have a "visited" set to pass down.
2587-
SmallPtrSet<ProtocolDecl *, 4> visitedSet;
2588-
if (!visited)
2589-
visited = &visitedSet;
2590-
2573+
UnresolvedHandlingKind unresolvedHandling) {
25912574
// Resolve the constraint.
25922575
auto resolvedConstraint = resolve(constraint, source);
25932576
if (!resolvedConstraint) {
@@ -2685,7 +2668,7 @@ ConstraintResult GenericSignatureBuilder::addTypeRequirement(
26852668
for (auto *proto : layout.getProtocols()) {
26862669
auto *protoDecl = proto->getDecl();
26872670
if (isErrorResult(addConformanceRequirement(subjectPA, protoDecl,
2688-
resolvedSource, *visited)))
2671+
resolvedSource)))
26892672
anyErrors = true;
26902673
}
26912674

@@ -3031,7 +3014,6 @@ ConstraintResult GenericSignatureBuilder::addInheritedRequirements(
30313014
TypeDecl *decl,
30323015
UnresolvedType type,
30333016
const RequirementSource *parentSource,
3034-
llvm::SmallPtrSetImpl<ProtocolDecl *> &visited,
30353017
ModuleDecl *inferForModule) {
30363018
if (isa<AssociatedTypeDecl>(decl) &&
30373019
decl->hasInterfaceType() &&
@@ -3096,8 +3078,7 @@ ConstraintResult GenericSignatureBuilder::addInheritedRequirements(
30963078
return addTypeRequirement(type, inheritedType,
30973079
getFloatingSource(typeRepr,
30983080
/*forInferred=*/false),
3099-
UnresolvedHandlingKind::GenerateConstraints,
3100-
&visited);
3081+
UnresolvedHandlingKind::GenerateConstraints);
31013082
};
31023083

31033084
auto visitLayout = [&](LayoutConstraint layout, const TypeRepr *typeRepr) {
@@ -3206,21 +3187,11 @@ ConstraintResult GenericSignatureBuilder::addRequirement(
32063187
llvm_unreachable("Unhandled requirement?");
32073188
}
32083189

3209-
ConstraintResult GenericSignatureBuilder::addRequirement(
3210-
const Requirement &req,
3211-
FloatingRequirementSource source,
3212-
ModuleDecl *inferForModule,
3213-
const SubstitutionMap *subMap) {
3214-
llvm::SmallPtrSet<ProtocolDecl *, 8> visited;
3215-
return addRequirement(req, source, inferForModule, subMap, visited);
3216-
}
3217-
32183190
ConstraintResult GenericSignatureBuilder::addRequirement(
32193191
const Requirement &req,
32203192
FloatingRequirementSource source,
32213193
ModuleDecl *inferForModule,
3222-
const SubstitutionMap *subMap,
3223-
llvm::SmallPtrSetImpl<ProtocolDecl *> &Visited) {
3194+
const SubstitutionMap *subMap) {
32243195
auto subst = [&](Type t) {
32253196
if (subMap)
32263197
return t.subst(*subMap);
@@ -3245,8 +3216,7 @@ ConstraintResult GenericSignatureBuilder::addRequirement(
32453216
}
32463217

32473218
return addTypeRequirement(firstType, secondType, source,
3248-
UnresolvedHandlingKind::GenerateConstraints,
3249-
&Visited);
3219+
UnresolvedHandlingKind::GenerateConstraints);
32503220
}
32513221

32523222
case RequirementKind::Layout: {

0 commit comments

Comments
 (0)