Skip to content

Commit 791648b

Browse files
committed
Revert "[ClangImporter] Decide whether to import Objective-C pointer types as"
This reverts commit fd11d2e.
1 parent 4b8ba3c commit 791648b

File tree

3 files changed

+17
-35
lines changed

3 files changed

+17
-35
lines changed

lib/ClangImporter/ImportDecl.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2796,6 +2796,16 @@ namespace {
27962796
SourceLoc(), Name,
27972797
Loc,
27982798
/*genericparams*/nullptr, DC);
2799+
2800+
// Unwrap an explicit ExistentialType around the underlying type so that
2801+
// the typealias can be used in a generic constraint context.
2802+
//
2803+
// FIXME: We might want to push this down further into importType(), and
2804+
// once ExistentialType becomes mandatory in the future we want to wrap
2805+
// references to imported typealiases in Sema's resolveType() as well.
2806+
if (auto *existentialType = SwiftType->getAs<ExistentialType>())
2807+
SwiftType = existentialType->getConstraintType();
2808+
27992809
Result->setUnderlyingType(SwiftType);
28002810

28012811
// Make Objective-C's 'id' unavailable.

lib/ClangImporter/ImportType.cpp

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,6 @@ namespace {
10501050
if (memberTypes.empty())
10511051
hasExplicitAnyObject = true;
10521052

1053-
// Generic arguments are always imported as existential types.
10541053
Type importedTypeArg = ExistentialType::get(
10551054
ProtocolCompositionType::get(
10561055
Impl.SwiftContext, memberTypes,
@@ -1183,6 +1182,9 @@ namespace {
11831182
}
11841183
}
11851184

1185+
if (bridgedType->isConstraintType())
1186+
bridgedType = ExistentialType::get(bridgedType);
1187+
11861188
return { importedType,
11871189
ImportHint(ImportHint::ObjCBridged, bridgedType) };
11881190
}
@@ -1203,9 +1205,9 @@ namespace {
12031205
members.push_back(proto->getDeclaredInterfaceType());
12041206
}
12051207

1206-
importedType =
1208+
importedType = ExistentialType::get(
12071209
ProtocolCompositionType::get(Impl.SwiftContext, members,
1208-
/*HasExplicitAnyObject=*/false);
1210+
/*HasExplicitAnyObject=*/false));
12091211
}
12101212

12111213
// Class or Class<P> maps to an existential metatype.
@@ -1283,32 +1285,6 @@ static bool isCFAudited(ImportTypeKind importKind) {
12831285
llvm_unreachable("Invalid ImportTypeKind.");
12841286
}
12851287

1286-
/// True if the type can be an existential type in this context.
1287-
static bool isExistentialContext(ImportTypeKind importKind) {
1288-
switch (importKind) {
1289-
case ImportTypeKind::Abstract:
1290-
case ImportTypeKind::Typedef:
1291-
return false;
1292-
case ImportTypeKind::Value:
1293-
case ImportTypeKind::ObjCCollectionElement:
1294-
case ImportTypeKind::Variable:
1295-
case ImportTypeKind::Result:
1296-
case ImportTypeKind::Enum:
1297-
case ImportTypeKind::RecordField:
1298-
case ImportTypeKind::AuditedVariable:
1299-
case ImportTypeKind::AuditedResult:
1300-
case ImportTypeKind::Parameter:
1301-
case ImportTypeKind::CompletionHandlerResultParameter:
1302-
case ImportTypeKind::CFRetainedOutParameter:
1303-
case ImportTypeKind::CFUnretainedOutParameter:
1304-
case ImportTypeKind::Property:
1305-
case ImportTypeKind::PropertyWithReferenceSemantics:
1306-
return true;
1307-
}
1308-
1309-
llvm_unreachable("Invalid ImportTypeKind.");
1310-
}
1311-
13121288
/// Turn T into Unmanaged<T>.
13131289
static Type getUnmanagedType(ClangImporter::Implementation &impl,
13141290
Type payloadType) {
@@ -1574,11 +1550,6 @@ static ImportedType adjustTypeForConcreteImport(
15741550

15751551
assert(importedType);
15761552

1577-
if (importedType->isConstraintType() &&
1578-
isExistentialContext(importKind)) {
1579-
importedType = ExistentialType::get(importedType);
1580-
}
1581-
15821553
if (importKind == ImportTypeKind::RecordField &&
15831554
importedType->isAnyClassReferenceType() &&
15841555
!importedType->isForeignReferenceType()) {

lib/PrintAsClang/DeclAndTypePrinter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1835,7 +1835,8 @@ class DeclAndTypePrinter::Implementation
18351835

18361836
void visitExistentialType(ExistentialType *ET,
18371837
Optional<OptionalTypeKind> optionalKind) {
1838-
visitPart(ET->getConstraintType(), optionalKind);
1838+
visitExistentialType(ET, optionalKind,
1839+
/*isMetatype=*/ET->getConstraintType()->is<AnyMetatypeType>());
18391840
}
18401841

18411842
void visitExistentialMetatypeType(ExistentialMetatypeType *MT,

0 commit comments

Comments
 (0)