Skip to content

Commit a05e841

Browse files
authored
Merge pull request #5130 from slavapestov/more-invalid-generic-signature-cleanup
Sema: More cleanup from removal of markInvalidGenericSignature()
2 parents 199a909 + cbf76fd commit a05e841

File tree

7 files changed

+17
-43
lines changed

7 files changed

+17
-43
lines changed

include/swift/AST/ArchetypeBuilder.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,7 @@ class ArchetypeBuilder {
282282
/// where \c Dictionary requires that its key type be \c Hashable,
283283
/// the requirement \c K : Hashable is inferred from the parameter type,
284284
/// because the type \c Dictionary<K,V> cannot be formed without it.
285-
///
286-
/// \returns true if an error occurred, false otherwise.
287-
bool inferRequirements(TypeLoc type, GenericParamList *genericParams);
285+
void inferRequirements(TypeLoc type, GenericParamList *genericParams);
288286

289287
/// Infer requirements from the given pattern, recursively.
290288
///
@@ -298,18 +296,14 @@ class ArchetypeBuilder {
298296
/// where \c Dictionary requires that its key type be \c Hashable,
299297
/// the requirement \c K : Hashable is inferred from the parameter type,
300298
/// because the type \c Dictionary<K,V> cannot be formed without it.
301-
///
302-
/// \returns true if an error occurred, false otherwise.
303-
bool inferRequirements(ParameterList *params,GenericParamList *genericParams);
299+
void inferRequirements(ParameterList *params,GenericParamList *genericParams);
304300

305301
/// Finalize the set of requirements, performing any remaining checking
306302
/// required before generating archetypes.
307303
///
308304
/// \param allowConcreteGenericParams If true, allow generic parameters to
309305
/// be made concrete.
310-
///
311-
/// \returns true if an error occurs, false otherwise.
312-
bool finalize(SourceLoc loc, bool allowConcreteGenericParams=false);
306+
void finalize(SourceLoc loc, bool allowConcreteGenericParams=false);
313307

314308
/// \brief Resolve the given type to the potential archetype it names.
315309
///

lib/AST/ArchetypeBuilder.cpp

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,6 @@ void ArchetypeBuilder::addRequirement(const Requirement &req,
15341534
class ArchetypeBuilder::InferRequirementsWalker : public TypeWalker {
15351535
ArchetypeBuilder &Builder;
15361536
SourceLoc Loc;
1537-
bool HadError = false;
15381537
unsigned Depth;
15391538

15401539
/// We cannot add requirements to archetypes from outer generic parameter
@@ -1551,8 +1550,6 @@ class ArchetypeBuilder::InferRequirementsWalker : public TypeWalker {
15511550
unsigned Depth)
15521551
: Builder(builder), Loc(loc), Depth(Depth) { }
15531552

1554-
bool hadError() const { return HadError; }
1555-
15561553
virtual Action walkToTypePost(Type ty) override {
15571554
auto boundGeneric = ty->getAs<BoundGenericType>();
15581555
if (!boundGeneric)
@@ -1604,14 +1601,12 @@ class ArchetypeBuilder::InferRequirementsWalker : public TypeWalker {
16041601
if (firstPA && secondPA) {
16051602
if (Builder.addSameTypeRequirementBetweenArchetypes(firstPA, secondPA,
16061603
source)) {
1607-
HadError = true;
16081604
return Action::Stop;
16091605
}
16101606
} else if (firstPA || secondPA) {
16111607
auto PA = firstPA ? firstPA : secondPA;
16121608
auto concrete = firstPA ? secondType : firstType;
16131609
if (Builder.addSameTypeRequirementToConcrete(PA, concrete, source)) {
1614-
HadError = true;
16151610
return Action::Stop;
16161611
}
16171612
}
@@ -1639,13 +1634,11 @@ class ArchetypeBuilder::InferRequirementsWalker : public TypeWalker {
16391634
auto proto = req.getSecondType()->castTo<ProtocolType>();
16401635
if (Builder.addConformanceRequirement(subjectPA, proto->getDecl(),
16411636
source)) {
1642-
HadError = true;
16431637
return Action::Stop;
16441638
}
16451639
} else {
16461640
if (Builder.addSuperclassRequirement(subjectPA, req.getSecondType(),
16471641
source)) {
1648-
HadError = true;
16491642
return Action::Stop;
16501643
}
16511644
}
@@ -1658,28 +1651,25 @@ class ArchetypeBuilder::InferRequirementsWalker : public TypeWalker {
16581651
}
16591652
};
16601653

1661-
bool ArchetypeBuilder::inferRequirements(TypeLoc type,
1654+
void ArchetypeBuilder::inferRequirements(TypeLoc type,
16621655
GenericParamList *genericParams) {
16631656
if (!type.getType())
1664-
return true;
1657+
return;
16651658
if (genericParams == nullptr)
1666-
return false;
1659+
return;
16671660
// FIXME: Crummy source-location information.
16681661
InferRequirementsWalker walker(*this, type.getSourceRange().Start,
16691662
genericParams->getDepth());
16701663
type.getType().walk(walker);
1671-
return walker.hadError();
16721664
}
16731665

1674-
bool ArchetypeBuilder::inferRequirements(ParameterList *params,
1666+
void ArchetypeBuilder::inferRequirements(ParameterList *params,
16751667
GenericParamList *genericParams) {
16761668
if (genericParams == nullptr)
1677-
return false;
1669+
return;
16781670

1679-
bool hadError = false;
16801671
for (auto P : *params)
1681-
hadError |= inferRequirements(P->getTypeLoc(), genericParams);
1682-
return hadError;
1672+
inferRequirements(P->getTypeLoc(), genericParams);
16831673
}
16841674

16851675
/// Perform typo correction on the given nested type, producing the
@@ -1733,9 +1723,8 @@ static Identifier typoCorrectNestedType(
17331723
return bestMatches.front();
17341724
}
17351725

1736-
bool
1726+
void
17371727
ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
1738-
bool invalid = false;
17391728
SmallPtrSet<PotentialArchetype *, 4> visited;
17401729

17411730
// Check for generic parameters which have been made concrete or equated
@@ -1769,7 +1758,6 @@ ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
17691758
Diags.diagnose(Source->getLoc(),
17701759
diag::requires_generic_param_made_equal_to_concrete,
17711760
rep->getName());
1772-
invalid = true;
17731761
continue;
17741762
}
17751763

@@ -1788,7 +1776,6 @@ ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
17881776
Diags.diagnose(Source->getLoc(),
17891777
diag::requires_generic_params_made_equal,
17901778
pa->getName(), other->getName());
1791-
invalid = true;
17921779
break;
17931780
}
17941781
}
@@ -1814,7 +1801,6 @@ ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
18141801

18151802
Context.Diags.diagnose(loc, diag::invalid_member_type_alias,
18161803
pa->getName());
1817-
invalid = true;
18181804
pa->setInvalid();
18191805
return;
18201806
}
@@ -1823,7 +1809,6 @@ ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
18231809
// Try to typo correct to a nested type name.
18241810
Identifier correction = typoCorrectNestedType(pa);
18251811
if (correction.empty()) {
1826-
invalid = true;
18271812
pa->setInvalid();
18281813
return;
18291814
}
@@ -1838,8 +1823,6 @@ ArchetypeBuilder::finalize(SourceLoc loc, bool allowConcreteGenericParams) {
18381823
RequirementSource(RequirementSource::Redundant, SourceLoc()));
18391824
});
18401825
}
1841-
1842-
return invalid;
18431826
}
18441827

18451828
template<typename F>

lib/ClangImporter/ImportDecl.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6852,9 +6852,7 @@ buildGenericSignature(GenericParamList *genericParams,
68526852
(void) result;
68536853
}
68546854
// TODO: any need to infer requirements?
6855-
bool result = builder.finalize(genericParams->getSourceRange().Start);
6856-
assert(!result);
6857-
(void) result;
6855+
builder.finalize(genericParams->getSourceRange().Start);
68586856

68596857
SmallVector<GenericTypeParamType *, 4> genericParamTypes;
68606858
for (auto param : *genericParams) {

lib/SILGen/SILGenDecl.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,8 +1782,7 @@ substSelfTypeIntoProtocolRequirementType(SILModule &M,
17821782
// signature, and the requirement had no additional generic parameters
17831783
// beyond `Self`.
17841784
if (!allParams.empty()) {
1785-
auto invalid = builder.finalize(SourceLoc());
1786-
assert(!invalid && "invalid requirements should not be seen in SIL");
1785+
builder.finalize(SourceLoc());
17871786

17881787
auto *sig = builder.getGenericSignature(allParams);
17891788

lib/Sema/TypeCheckDecl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7504,7 +7504,7 @@ static Type checkExtensionGenericParams(
75047504

75057505
// Local function used to infer requirements from the extended type.
75067506
TypeLoc extendedTypeInfer;
7507-
auto inferExtendedTypeReqs = [&](ArchetypeBuilder &builder) -> bool {
7507+
auto inferExtendedTypeReqs = [&](ArchetypeBuilder &builder) {
75087508
if (extendedTypeInfer.isNull()) {
75097509
if (isa<ProtocolDecl>(nominal)) {
75107510
// Simple case: protocols don't form bound generic types.
@@ -7521,7 +7521,7 @@ static Type checkExtensionGenericParams(
75217521
}
75227522
}
75237523

7524-
return builder.inferRequirements(extendedTypeInfer, genericParams);
7524+
builder.inferRequirements(extendedTypeInfer, genericParams);
75257525
};
75267526

75277527
ext->setIsBeingTypeChecked(true);

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ GenericSignature *TypeChecker::validateGenericSignature(
683683
DeclContext *dc,
684684
GenericSignature *parentSig,
685685
bool allowConcreteGenericParams,
686-
std::function<bool(ArchetypeBuilder &)> inferRequirements) {
686+
std::function<void(ArchetypeBuilder &)> inferRequirements) {
687687
assert(genericParams && "Missing generic parameters?");
688688

689689
// Create the archetype builder.

lib/Sema/TypeChecker.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ class TypeChecker final : public LazyResolver {
10421042
///
10431043
/// \param inferRequirements When non-empty, callback that will be invoked
10441044
/// to perform any additional requirement inference that contributes to the
1045-
/// generic signature. Returns true if an error occurred.
1045+
/// generic signature.
10461046
///
10471047
/// \returns the generic signature that captures the generic
10481048
/// parameters and inferred requirements.
@@ -1051,7 +1051,7 @@ class TypeChecker final : public LazyResolver {
10511051
DeclContext *dc,
10521052
GenericSignature *outerSignature,
10531053
bool allowConcreteGenericParams,
1054-
std::function<bool(ArchetypeBuilder &)> inferRequirements);
1054+
std::function<void(ArchetypeBuilder &)> inferRequirements);
10551055

10561056
/// Perform any final semantic checks on the given generic parameter list.
10571057
void finalizeGenericParamList(GenericParamList *genericParams,

0 commit comments

Comments
 (0)