Skip to content

Commit d7c1d81

Browse files
committed
AST: Update GenericSignatureBuilder for subclass existentials
1 parent 9c3b514 commit d7c1d81

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "swift/AST/ASTContext.h"
2121
#include "swift/AST/DiagnosticsSema.h"
2222
#include "swift/AST/DiagnosticEngine.h"
23+
#include "swift/AST/ExistentialLayout.h"
2324
#include "swift/AST/GenericEnvironment.h"
2425
#include "swift/AST/Module.h"
2526
#include "swift/AST/ParameterList.h"
@@ -2520,12 +2521,22 @@ bool GenericSignatureBuilder::addTypeRequirement(
25202521

25212522
// Protocol requirements.
25222523
if (constraintType->isExistentialType()) {
2523-
// FIXME: "Class" or arbitrary layout requirements.
2524-
SmallVector<ProtocolDecl *, 4> protocols;
2525-
(void)constraintType->getExistentialTypeProtocols(protocols);
25262524
bool anyErrors = false;
2527-
for (auto proto : protocols) {
2528-
if (addConformanceRequirement(subjectPA, proto, resolvedSource,
2525+
2526+
auto layout = constraintType->getExistentialLayout();
2527+
2528+
assert((!layout.requiresClass || layout.requiresClassImplied) &&
2529+
"explicit AnyObject not yet supported");
2530+
2531+
if (layout.superclass) {
2532+
if (addSuperclassRequirementDirect(subjectPA, layout.superclass,
2533+
resolvedSource))
2534+
anyErrors = true;
2535+
}
2536+
2537+
for (auto *proto : layout.getProtocols()) {
2538+
auto *protoDecl = proto->getDecl();
2539+
if (addConformanceRequirement(subjectPA, protoDecl, resolvedSource,
25292540
*visited))
25302541
anyErrors = true;
25312542
}

0 commit comments

Comments
 (0)