Skip to content

Commit b962b6f

Browse files
authored
Merge pull request #41786 from DougGregor/opened-archetypes-back-in-your-context
Stop mapping opened archetypes "out of context".
2 parents 30a7ec1 + bd6f27b commit b962b6f

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

lib/AST/ASTMangler.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1323,10 +1323,16 @@ void ASTMangler::appendType(Type type, GenericSignature sig,
13231323

13241324
// type ::= archetype
13251325
case TypeKind::PrimaryArchetype:
1326-
case TypeKind::OpenedArchetype:
13271326
case TypeKind::SequenceArchetype:
13281327
llvm_unreachable("Cannot mangle free-standing archetypes");
13291328

1329+
case TypeKind::OpenedArchetype: {
1330+
// Opened archetypes have always been mangled via their interface type,
1331+
// although those manglings aren't used in any stable manner.
1332+
auto openedType = cast<OpenedArchetypeType>(tybase);
1333+
return appendType(openedType->getInterfaceType(), sig, forDecl);
1334+
}
1335+
13301336
case TypeKind::OpaqueTypeArchetype: {
13311337
auto opaqueType = cast<OpaqueTypeArchetypeType>(tybase);
13321338
auto opaqueDecl = opaqueType->getDecl();

lib/AST/GenericEnvironment.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,11 @@ Type MapTypeOutOfContext::operator()(SubstitutableType *type) const {
242242
auto archetype = cast<ArchetypeType>(type);
243243
if (isa<OpaqueTypeArchetypeType>(archetype->getRoot()))
244244
return Type();
245-
245+
246+
// Leave opened archetypes alone; they're handled contextually.
247+
if (isa<OpenedArchetypeType>(archetype))
248+
return Type(type);
249+
246250
return archetype->getInterfaceType();
247251
}
248252

0 commit comments

Comments
 (0)