@@ -1344,37 +1344,24 @@ static llvm::Optional<TypeLookupError>
13441344checkGenericRequirement (const GenericRequirementDescriptor &req,
13451345 llvm::SmallVectorImpl<const void *> &extraArguments,
13461346 SubstGenericParameterFn substGenericParam,
1347- SubstDependentWitnessTableFn substWitnessTable,
1348- bool allowsUnresolvedSubject) {
1347+ SubstDependentWitnessTableFn substWitnessTable) {
13491348 assert (!req.getFlags ().isPackRequirement ());
13501349
13511350 // Make sure we understand the requirement we're dealing with.
13521351 if (!req.hasKnownKind ())
13531352 return TypeLookupError (" unknown kind" );
13541353
1355- const Metadata *subjectType = nullptr ;
1356-
13571354 // Resolve the subject generic parameter.
13581355 auto result = swift_getTypeByMangledName (
13591356 MetadataState::Abstract, req.getParam (), extraArguments.data (),
13601357 substGenericParam, substWitnessTable);
1361-
1362- if (!allowsUnresolvedSubject && result.isError ()) {
1358+ if (result.getError ())
13631359 return *result.getError ();
1364- }
1365-
1366- if (!result.isError ()) {
1367- subjectType = result.getType ().getMetadata ();
1368- }
1360+ const Metadata *subjectType = result.getType ().getMetadata ();
13691361
13701362 // Check the requirement.
13711363 switch (req.getKind ()) {
13721364 case GenericRequirementKind::Protocol: {
1373- // Protocol requirements _require_ a subject type.
1374- if (result.isError ()) {
1375- return *result.getError ();
1376- }
1377-
13781365 const WitnessTable *witnessTable = nullptr ;
13791366 if (!_conformsToProtocol (nullptr , subjectType, req.getProtocol (),
13801367 &witnessTable)) {
@@ -1395,37 +1382,16 @@ checkGenericRequirement(const GenericRequirementDescriptor &req,
13951382 }
13961383
13971384 case GenericRequirementKind::SameType: {
1398- // Same type requirements don't require a valid subject.
1399-
1400- const Metadata *sameType = nullptr ;
1401-
14021385 // Demangle the second type under the given substitutions.
14031386 auto result = swift_getTypeByMangledName (
14041387 MetadataState::Abstract, req.getMangledTypeName (),
14051388 extraArguments.data (), substGenericParam, substWitnessTable);
1406-
1407- if (!allowsUnresolvedSubject && result.isError ()) {
1389+ if (result.getError ())
14081390 return *result.getError ();
1409- }
1410-
1411- if (!result.isError ()) {
1412- sameType = result.getType ().getMetadata ();
1413- }
1414-
1415- // If we don't have one of either the subject type or the same type and we
1416- // have the other, then return this as a success. This assumes the given
1417- // extra arguments have provided only the required key arguments in which
1418- // case some same type constraints may concretize some generic arguments
1419- // making them non-key.
1420- //
1421- // Note: We don't need to check for allowsUnresolvedSubject here because
1422- // these can only be null in the case where we do allow it.
1423- if ((!subjectType && sameType) || (subjectType && !sameType)) {
1424- return llvm::None;
1425- }
1391+ auto otherType = result.getType ().getMetadata ();
14261392
14271393 // Check that the types are equivalent.
1428- if (subjectType != sameType ) {
1394+ if (subjectType != otherType ) {
14291395 return TYPE_LOOKUP_ERROR_FMT (
14301396 " subject type %.*s does not match %.*s" , (int )req.getParam ().size (),
14311397 req.getParam ().data (), (int )req.getMangledTypeName ().size (),
@@ -1436,20 +1402,10 @@ checkGenericRequirement(const GenericRequirementDescriptor &req,
14361402 }
14371403
14381404 case GenericRequirementKind::Layout: {
1439- // Layout requirements _require_ a subject type.
1440- if (result.isError ()) {
1441- return *result.getError ();
1442- }
1443-
14441405 return satisfiesLayoutConstraint (req, subjectType);
14451406 }
14461407
14471408 case GenericRequirementKind::BaseClass: {
1448- // Base class requirements _require_ a subject type.
1449- if (result.isError ()) {
1450- return *result.getError ();
1451- }
1452-
14531409 // Demangle the base type under the given substitutions.
14541410 auto result = swift_getTypeByMangledName (
14551411 MetadataState::Abstract, req.getMangledTypeName (),
@@ -1638,8 +1594,7 @@ llvm::Optional<TypeLookupError> swift::_checkGenericRequirements(
16381594 llvm::ArrayRef<GenericRequirementDescriptor> requirements,
16391595 llvm::SmallVectorImpl<const void *> &extraArguments,
16401596 SubstGenericParameterFn substGenericParam,
1641- SubstDependentWitnessTableFn substWitnessTable,
1642- bool allowsUnresolvedSubject) {
1597+ SubstDependentWitnessTableFn substWitnessTable) {
16431598 for (const auto &req : requirements) {
16441599 if (req.getFlags ().isPackRequirement ()) {
16451600 auto error = checkGenericPackRequirement (req, extraArguments,
@@ -1650,8 +1605,7 @@ llvm::Optional<TypeLookupError> swift::_checkGenericRequirements(
16501605 } else {
16511606 auto error = checkGenericRequirement (req, extraArguments,
16521607 substGenericParam,
1653- substWitnessTable,
1654- allowsUnresolvedSubject);
1608+ substWitnessTable);
16551609 if (error)
16561610 return error;
16571611 }
0 commit comments