Skip to content

Commit 48a5432

Browse files
committed
[NFC] Remove ConformanceCheckFlags::InExpression
The last read of this bit was removed when the legacy referenced name tracker was deleted in the last commit.
1 parent 9416602 commit 48a5432

16 files changed

+40
-83
lines changed

lib/Sema/CSApply.cpp

+17-30
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Solution::computeSubstitutions(GenericSignature sig,
9191
// FIXME: Retrieve the conformance from the solution itself.
9292
return TypeChecker::conformsToProtocol(replacement, protoType,
9393
getConstraintSystem().DC,
94-
ConformanceCheckFlags::InExpression);
94+
None);
9595
};
9696

9797
return SubstitutionMap::get(sig,
@@ -494,9 +494,7 @@ namespace {
494494
// the protocol requirement with Self == the concrete type, and SILGen
495495
// (or later) can devirtualize as appropriate.
496496
auto conformance =
497-
TypeChecker::conformsToProtocol(
498-
baseTy, proto, cs.DC,
499-
ConformanceCheckFlags::InExpression);
497+
TypeChecker::conformsToProtocol(baseTy, proto, cs.DC, None);
500498
if (conformance.isConcrete()) {
501499
if (auto witness = conformance.getConcrete()->getWitnessDecl(decl)) {
502500
bool isMemberOperator = witness->getDeclContext()->isTypeContext();
@@ -2141,7 +2139,7 @@ namespace {
21412139
= TypeChecker::conformsToProtocol(valueType,
21422140
bridgedProto,
21432141
cs.DC,
2144-
ConformanceCheckFlags::InExpression);
2142+
None);
21452143

21462144
FuncDecl *fn = nullptr;
21472145

@@ -2401,8 +2399,7 @@ namespace {
24012399
ProtocolDecl *protocol = TypeChecker::getProtocol(
24022400
ctx, expr->getLoc(), KnownProtocolKind::ExpressibleByStringLiteral);
24032401

2404-
if (!TypeChecker::conformsToProtocol(
2405-
type, protocol, cs.DC, ConformanceCheckFlags::InExpression)) {
2402+
if (!TypeChecker::conformsToProtocol(type, protocol, cs.DC, None)) {
24062403
// If the type does not conform to ExpressibleByStringLiteral, it should
24072404
// be ExpressibleByExtendedGraphemeClusterLiteral.
24082405
protocol = TypeChecker::getProtocol(
@@ -2411,8 +2408,7 @@ namespace {
24112408
isStringLiteral = false;
24122409
isGraphemeClusterLiteral = true;
24132410
}
2414-
if (!TypeChecker::conformsToProtocol(
2415-
type, protocol, cs.DC, ConformanceCheckFlags::InExpression)) {
2411+
if (!TypeChecker::conformsToProtocol(type, protocol, cs.DC, None)) {
24162412
// ... or it should be ExpressibleByUnicodeScalarLiteral.
24172413
protocol = TypeChecker::getProtocol(
24182414
cs.getASTContext(), expr->getLoc(),
@@ -2527,8 +2523,7 @@ namespace {
25272523
assert(proto && "Missing string interpolation protocol?");
25282524

25292525
auto conformance =
2530-
TypeChecker::conformsToProtocol(type, proto, cs.DC,
2531-
ConformanceCheckFlags::InExpression);
2526+
TypeChecker::conformsToProtocol(type, proto, cs.DC, None);
25322527
assert(conformance && "string interpolation type conforms to protocol");
25332528

25342529
DeclName constrName(ctx, DeclBaseName::createConstructor(), argLabels);
@@ -2634,8 +2629,7 @@ namespace {
26342629
auto proto = TypeChecker::getLiteralProtocol(cs.getASTContext(), expr);
26352630
assert(proto && "Missing object literal protocol?");
26362631
auto conformance =
2637-
TypeChecker::conformsToProtocol(conformingType, proto, cs.DC,
2638-
ConformanceCheckFlags::InExpression);
2632+
TypeChecker::conformsToProtocol(conformingType, proto, cs.DC, None);
26392633
assert(conformance && "object literal type conforms to protocol");
26402634

26412635
auto constrName = TypeChecker::getObjectLiteralConstructorName(ctx, expr);
@@ -3343,8 +3337,7 @@ namespace {
33433337
assert(arrayProto && "type-checked array literal w/o protocol?!");
33443338

33453339
auto conformance =
3346-
TypeChecker::conformsToProtocol(arrayTy, arrayProto, cs.DC,
3347-
ConformanceCheckFlags::InExpression);
3340+
TypeChecker::conformsToProtocol(arrayTy, arrayProto, cs.DC, None);
33483341
assert(conformance && "Type does not conform to protocol?");
33493342

33503343
DeclName name(ctx, DeclBaseName::createConstructor(),
@@ -3389,7 +3382,7 @@ namespace {
33893382

33903383
auto conformance =
33913384
TypeChecker::conformsToProtocol(dictionaryTy, dictionaryProto, cs.DC,
3392-
ConformanceCheckFlags::InExpression);
3385+
None);
33933386
if (conformance.isInvalid())
33943387
return nullptr;
33953388

@@ -4128,8 +4121,7 @@ namespace {
41284121
// Special handle for literals conditional checked cast when they can
41294122
// be statically coerced to the cast type.
41304123
if (protocol && TypeChecker::conformsToProtocol(
4131-
toType, protocol, cs.DC,
4132-
ConformanceCheckFlags::InExpression)) {
4124+
toType, protocol, cs.DC, None)) {
41334125
ctx.Diags
41344126
.diagnose(expr->getLoc(),
41354127
diag::literal_conditional_downcast_to_coercion,
@@ -5006,8 +4998,7 @@ namespace {
50064998
// verified by the solver, we just need to get it again
50074999
// with all of the generic parameters resolved.
50085000
auto hashableConformance =
5009-
TypeChecker::conformsToProtocol(indexType, hashable, cs.DC,
5010-
ConformanceCheckFlags::InExpression);
5001+
TypeChecker::conformsToProtocol(indexType, hashable, cs.DC, None);
50115002
assert(hashableConformance);
50125003

50135004
conformances.push_back(hashableConformance);
@@ -5331,7 +5322,7 @@ collectExistentialConformances(Type fromType, Type toType,
53315322
SmallVector<ProtocolConformanceRef, 4> conformances;
53325323
for (auto proto : layout.getProtocols()) {
53335324
conformances.push_back(TypeChecker::containsProtocol(
5334-
fromType, proto->getDecl(), DC, ConformanceCheckFlags::InExpression));
5325+
fromType, proto->getDecl(), DC, None));
53355326
}
53365327

53375328
return toType->getASTContext().AllocateCopy(conformances);
@@ -6497,8 +6488,7 @@ Expr *ExprRewriter::coerceToType(Expr *expr, Type toType,
64976488
auto hashable = ctx.getProtocol(KnownProtocolKind::Hashable);
64986489
auto conformance =
64996490
TypeChecker::conformsToProtocol(
6500-
cs.getType(expr), hashable, cs.DC,
6501-
ConformanceCheckFlags::InExpression);
6491+
cs.getType(expr), hashable, cs.DC, None);
65026492
assert(conformance && "must conform to Hashable");
65036493

65046494
return cs.cacheType(
@@ -7033,7 +7023,7 @@ Expr *ExprRewriter::convertLiteralInPlace(Expr *literal,
70337023
// initialize via the builtin protocol.
70347024
if (builtinProtocol) {
70357025
auto builtinConformance = TypeChecker::conformsToProtocol(
7036-
type, builtinProtocol, cs.DC, ConformanceCheckFlags::InExpression);
7026+
type, builtinProtocol, cs.DC, None);
70377027
if (builtinConformance) {
70387028
// Find the witness that we'll use to initialize the type via a builtin
70397029
// literal.
@@ -7065,8 +7055,7 @@ Expr *ExprRewriter::convertLiteralInPlace(Expr *literal,
70657055

70667056
// This literal type must conform to the (non-builtin) protocol.
70677057
assert(protocol && "requirements should have stopped recursion");
7068-
auto conformance = TypeChecker::conformsToProtocol(type, protocol, cs.DC,
7069-
ConformanceCheckFlags::InExpression);
7058+
auto conformance = TypeChecker::conformsToProtocol(type, protocol, cs.DC, None);
70707059
assert(conformance && "must conform to literal protocol");
70717060

70727061
// Dig out the literal type and perform a builtin literal conversion to it.
@@ -7187,8 +7176,7 @@ ExprRewriter::finishApplyDynamicCallable(ApplyExpr *apply,
71877176
auto dictLitProto =
71887177
ctx.getProtocol(KnownProtocolKind::ExpressibleByDictionaryLiteral);
71897178
auto conformance =
7190-
TypeChecker::conformsToProtocol(argumentType, dictLitProto, cs.DC,
7191-
ConformanceCheckFlags::InExpression);
7179+
TypeChecker::conformsToProtocol(argumentType, dictLitProto, cs.DC, None);
71927180
auto keyType = conformance.getTypeWitnessByName(argumentType, ctx.Id_Key);
71937181
auto valueType =
71947182
conformance.getTypeWitnessByName(argumentType, ctx.Id_Value);
@@ -8464,8 +8452,7 @@ ProtocolConformanceRef Solution::resolveConformance(
84648452
// itself rather than another conforms-to-protocol check.
84658453
Type substConformingType = simplifyType(conformingType);
84668454
return TypeChecker::conformsToProtocol(
8467-
substConformingType, proto, constraintSystem->DC,
8468-
ConformanceCheckFlags::InExpression);
8455+
substConformingType, proto, constraintSystem->DC, None);
84698456
}
84708457

84718458
return ProtocolConformanceRef::forInvalid();

lib/Sema/CSBindings.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -768,8 +768,7 @@ ConstraintSystem::getPotentialBindings(TypeVariableType *typeVar) const {
768768
// If the type conforms to this protocol, we're covered.
769769
if (TypeChecker::conformsToProtocol(
770770
testType, protocol, DC,
771-
(ConformanceCheckFlags::InExpression |
772-
ConformanceCheckFlags::SkipConditionalRequirements))) {
771+
ConformanceCheckFlags::SkipConditionalRequirements)) {
773772
coveredLiteralProtocols.insert(protocol);
774773
break;
775774
}

lib/Sema/CSDiagnostics.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -2455,8 +2455,7 @@ bool ContextualFailure::diagnoseThrowsTypeMismatch() const {
24552455
Ctx.getProtocol(KnownProtocolKind::ErrorCodeProtocol)) {
24562456
Type errorCodeType = getFromType();
24572457
auto conformance = TypeChecker::conformsToProtocol(
2458-
errorCodeType, errorCodeProtocol, getDC(),
2459-
ConformanceCheckFlags::InExpression);
2458+
errorCodeType, errorCodeProtocol, getDC(), None);
24602459
if (conformance) {
24612460
Type errorType =
24622461
conformance
@@ -2781,7 +2780,7 @@ bool ContextualFailure::tryProtocolConformanceFixIt(
27812780
SmallVector<std::string, 8> missingProtoTypeStrings;
27822781
for (auto protocol : layout.getProtocols()) {
27832782
if (!TypeChecker::conformsToProtocol(fromType, protocol->getDecl(), getDC(),
2784-
ConformanceCheckFlags::InExpression)) {
2783+
None)) {
27852784
missingProtoTypeStrings.push_back(protocol->getString());
27862785
}
27872786
}

lib/Sema/CSGen.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,7 @@ namespace {
551551
if (otherArgTy && otherArgTy->getAnyNominal()) {
552552
if (otherArgTy->isEqual(paramTy) &&
553553
TypeChecker::conformsToProtocol(
554-
otherArgTy, literalProto, CS.DC,
555-
ConformanceCheckFlags::InExpression)) {
554+
otherArgTy, literalProto, CS.DC, None)) {
556555
return true;
557556
}
558557
} else if (Type defaultType =

lib/Sema/CSRanking.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ computeSelfTypeRelationship(DeclContext *dc, ValueDecl *decl1,
252252
// unrelated.
253253
auto conformance = TypeChecker::conformsToProtocol(
254254
modelTy, proto, dc,
255-
(ConformanceCheckFlags::InExpression|
256-
ConformanceCheckFlags::SkipConditionalRequirements));
255+
ConformanceCheckFlags::SkipConditionalRequirements);
257256
if (conformance.isInvalid())
258257
return {SelfTypeRelationship::Unrelated, conformance};
259258

lib/Sema/CSSimplify.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -5175,8 +5175,7 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
51755175
case ConstraintKind::SelfObjectOfProtocol: {
51765176
auto conformance = TypeChecker::containsProtocol(
51775177
type, protocol, DC,
5178-
(ConformanceCheckFlags::InExpression |
5179-
ConformanceCheckFlags::SkipConditionalRequirements));
5178+
ConformanceCheckFlags::SkipConditionalRequirements);
51805179
if (conformance) {
51815180
return recordConformance(conformance);
51825181
}
@@ -5186,8 +5185,7 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
51865185
// Check whether this type conforms to the protocol.
51875186
auto conformance = TypeChecker::conformsToProtocol(
51885187
type, protocol, DC,
5189-
(ConformanceCheckFlags::InExpression |
5190-
ConformanceCheckFlags::SkipConditionalRequirements));
5188+
ConformanceCheckFlags::SkipConditionalRequirements);
51915189
if (conformance) {
51925190
return recordConformance(conformance);
51935191
}
@@ -6871,8 +6869,7 @@ ConstraintSystem::simplifyValueWitnessConstraint(
68716869
assert(proto && "Value witness constraint for a non-requirement");
68726870
auto conformance = TypeChecker::conformsToProtocol(
68736871
baseObjectType, proto, useDC,
6874-
(ConformanceCheckFlags::InExpression |
6875-
ConformanceCheckFlags::SkipConditionalRequirements));
6872+
ConformanceCheckFlags::SkipConditionalRequirements);
68766873
if (!conformance) {
68776874
// The conformance failed, so mark the member type as a "hole". We cannot
68786875
// do anything further here.

lib/Sema/CSSolver.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -1738,10 +1738,10 @@ void ConstraintSystem::ArgumentInfoCollector::minimizeLiteralProtocols() {
17381738

17391739
auto first =
17401740
TypeChecker::conformsToProtocol(candidate.second, candidates[result].first,
1741-
CS.DC, ConformanceCheckFlags::InExpression);
1741+
CS.DC, None);
17421742
auto second =
17431743
TypeChecker::conformsToProtocol(candidates[result].second, candidate.first,
1744-
CS.DC, ConformanceCheckFlags::InExpression);
1744+
CS.DC, None);
17451745
if (first.isInvalid() == second.isInvalid())
17461746
return;
17471747

@@ -1967,8 +1967,7 @@ void ConstraintSystem::sortDesignatedTypes(
19671967
++nextType;
19681968
break;
19691969
} else if (auto *protoDecl = dyn_cast<ProtocolDecl>(nominalTypes[i])) {
1970-
if (TypeChecker::conformsToProtocol(
1971-
argType, protoDecl, DC, ConformanceCheckFlags::InExpression)) {
1970+
if (TypeChecker::conformsToProtocol(argType, protoDecl, DC, None)) {
19721971
std::swap(nominalTypes[nextType], nominalTypes[i]);
19731972
++nextType;
19741973
break;

lib/Sema/ConstraintSystem.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -3587,8 +3587,7 @@ bool constraints::conformsToKnownProtocol(ConstraintSystem &cs, Type type,
35873587
KnownProtocolKind protocol) {
35883588
if (auto *proto =
35893589
TypeChecker::getProtocol(cs.getASTContext(), SourceLoc(), protocol))
3590-
return (bool)TypeChecker::conformsToProtocol(
3591-
type, proto, cs.DC, ConformanceCheckFlags::InExpression);
3590+
return (bool)TypeChecker::conformsToProtocol(type, proto, cs.DC, None);
35923591
return false;
35933592
}
35943593

@@ -3602,8 +3601,7 @@ Type constraints::isRawRepresentable(ConstraintSystem &cs, Type type) {
36023601
if (!rawReprType)
36033602
return Type();
36043603

3605-
auto conformance = TypeChecker::conformsToProtocol(
3606-
type, rawReprType, DC, ConformanceCheckFlags::InExpression);
3604+
auto conformance = TypeChecker::conformsToProtocol(type, rawReprType, DC, None);
36073605
if (conformance.isInvalid())
36083606
return Type();
36093607

lib/Sema/TypeCheckAvailability.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -2666,10 +2666,8 @@ static bool isIntegerOrFloatingPointType(Type ty, DeclContext *DC,
26662666
Context.getProtocol(KnownProtocolKind::ExpressibleByFloatLiteral);
26672667
if (!integerType || !floatingType) return false;
26682668

2669-
return TypeChecker::conformsToProtocol(ty, integerType, DC,
2670-
ConformanceCheckFlags::InExpression) ||
2671-
TypeChecker::conformsToProtocol(ty, floatingType, DC,
2672-
ConformanceCheckFlags::InExpression);
2669+
return TypeChecker::conformsToProtocol(ty, integerType, DC, None) ||
2670+
TypeChecker::conformsToProtocol(ty, floatingType, DC, None);
26732671
}
26742672

26752673

lib/Sema/TypeCheckConstraints.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -3752,8 +3752,7 @@ CheckedCastKind TypeChecker::typeCheckCheckedCast(Type fromType,
37523752
auto protocolDecl =
37533753
dyn_cast_or_null<ProtocolDecl>(fromType->getAnyNominal());
37543754
if (protocolDecl &&
3755-
!conformsToProtocol(toType, protocolDecl, dc,
3756-
ConformanceCheckFlags::InExpression)) {
3755+
!conformsToProtocol(toType, protocolDecl, dc, None)) {
37573756
return failed();
37583757
}
37593758
}
@@ -3847,8 +3846,7 @@ CheckedCastKind TypeChecker::typeCheckCheckedCast(Type fromType,
38473846
auto nsErrorTy = Context.getNSErrorType();
38483847

38493848
if (auto errorTypeProto = Context.getProtocol(KnownProtocolKind::Error)) {
3850-
if (!conformsToProtocol(toType, errorTypeProto, dc,
3851-
ConformanceCheckFlags::InExpression)
3849+
if (!conformsToProtocol(toType, errorTypeProto, dc, None)
38523850
.isInvalid()) {
38533851
if (nsErrorTy) {
38543852
if (isSubtypeOf(fromType, nsErrorTy, dc)
@@ -3859,8 +3857,7 @@ CheckedCastKind TypeChecker::typeCheckCheckedCast(Type fromType,
38593857
}
38603858
}
38613859

3862-
if (!conformsToProtocol(fromType, errorTypeProto, dc,
3863-
ConformanceCheckFlags::InExpression)
3860+
if (!conformsToProtocol(fromType, errorTypeProto, dc, None)
38643861
.isInvalid()) {
38653862
// Cast of an error-conforming type to NSError or NSObject.
38663863
if ((nsObject && toType->isEqual(nsObject)) ||

lib/Sema/TypeCheckDeclPrimary.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -919,8 +919,7 @@ static Optional<std::string> buildDefaultInitializerString(DeclContext *dc,
919919
#define CHECK_LITERAL_PROTOCOL(Kind, String) \
920920
if (auto proto = TypeChecker::getProtocol( \
921921
type->getASTContext(), SourceLoc(), KnownProtocolKind::Kind)) { \
922-
if (TypeChecker::conformsToProtocol(type, proto, dc, \
923-
ConformanceCheckFlags::InExpression)) \
922+
if (TypeChecker::conformsToProtocol(type, proto, dc, None)) \
924923
return std::string(String); \
925924
}
926925
CHECK_LITERAL_PROTOCOL(ExpressibleByArrayLiteral, "[]")

lib/Sema/TypeCheckNameLookup.cpp

+2-12
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,6 @@ namespace {
9999
/// from the innermost scope with results)
100100
void add(ValueDecl *found, DeclContext *baseDC, Type foundInType,
101101
bool isOuter) {
102-
ConformanceCheckOptions conformanceOptions;
103-
if (Options.contains(NameLookupFlags::KnownPrivate))
104-
conformanceOptions |= ConformanceCheckFlags::InExpression;
105-
conformanceOptions |= ConformanceCheckFlags::SkipConditionalRequirements;
106-
107102
DeclContext *foundDC = found->getDeclContext();
108103

109104
auto addResult = [&](ValueDecl *result) {
@@ -159,7 +154,7 @@ namespace {
159154
auto *foundProto = cast<ProtocolDecl>(foundDC);
160155
auto conformance = TypeChecker::conformsToProtocol(conformingType,
161156
foundProto, DC,
162-
conformanceOptions);
157+
ConformanceCheckFlags::SkipConditionalRequirements);
163158
if (conformance.isInvalid()) {
164159
// If there's no conformance, we have an existential
165160
// and we found a member from one of the protocols, and
@@ -481,18 +476,13 @@ LookupTypeResult TypeChecker::lookupMemberType(DeclContext *dc,
481476
if (!result) {
482477
// We couldn't find any normal declarations. Let's try inferring
483478
// associated types.
484-
ConformanceCheckOptions conformanceOptions;
485-
if (options.contains(NameLookupFlags::KnownPrivate))
486-
conformanceOptions |= ConformanceCheckFlags::InExpression;
487-
conformanceOptions |= ConformanceCheckFlags::SkipConditionalRequirements;
488-
489479
for (AssociatedTypeDecl *assocType : inferredAssociatedTypes) {
490480
// If the type does not actually conform to the protocol, skip this
491481
// member entirely.
492482
auto *protocol = cast<ProtocolDecl>(assocType->getDeclContext());
493483

494484
auto conformance = conformsToProtocol(type, protocol, dc,
495-
conformanceOptions);
485+
ConformanceCheckFlags::SkipConditionalRequirements);
496486
if (!conformance) {
497487
// FIXME: This is an error path. Should we try to recover?
498488
continue;

lib/Sema/TypeCheckProtocol.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -4481,7 +4481,6 @@ operator()(CanType dependentType, Type conformingReplacementType,
44814481
conformingReplacementType,
44824482
conformedProtocol,
44834483
dc,
4484-
ConformanceCheckFlags::InExpression|
44854484
ConformanceCheckFlags::SkipConditionalRequirements);
44864485
}
44874486

0 commit comments

Comments
 (0)