Merge pull request #12680 from DougGregor/importer-bridged-typedef-4.1
[Clang importer] Fix bridging of the underlying types of typedefs.
diff --git a/lib/ClangImporter/ImportType.cpp b/lib/ClangImporter/ImportType.cpp
index 90eadf6..b7d318d 100644
--- a/lib/ClangImporter/ImportType.cpp
+++ b/lib/ClangImporter/ImportType.cpp
@@ -684,18 +684,13 @@
auto typedefBridgeability = getTypedefBridgeability(underlyingType);
// Figure out the typedef we should actually use.
- auto underlyingBridgeability =
- (Bridging == Bridgeability::Full
- ? typedefBridgeability : Bridgeability::None);
- SwiftTypeConverter innerConverter(Impl, AllowNSUIntegerAsInt,
- underlyingBridgeability);
+ SwiftTypeConverter innerConverter(Impl, AllowNSUIntegerAsInt, Bridging);
auto underlyingResult = innerConverter.Visit(underlyingType);
// If we used different bridgeability than this typedef normally
- // would because we're in a non-bridgeable context, and therefore
- // the underlying type is different from the mapping of the typedef,
- // use the underlying type.
- if (underlyingBridgeability != typedefBridgeability &&
+ // would, and therefore the underlying type is different from the
+ // mapping of the typedef, use the underlying type.
+ if (Bridging != typedefBridgeability &&
!underlyingResult.AbstractType->isEqual(mappedType)) {
return underlyingResult;
}
diff --git a/test/ClangImporter/Inputs/custom-modules/ObjCParseExtras.h b/test/ClangImporter/Inputs/custom-modules/ObjCParseExtras.h
index 4a86bae..27849b3 100644
--- a/test/ClangImporter/Inputs/custom-modules/ObjCParseExtras.h
+++ b/test/ClangImporter/Inputs/custom-modules/ObjCParseExtras.h
@@ -203,3 +203,9 @@
@property (class, readonly) InstancetypeAccessor *prop;
+ (instancetype)prop;
@end
+
+typedef NSArray<NSString *> *NSStringArray;
+
+@interface BridgedTypedefs : NSObject
+@property (readonly,nonnull) NSArray<NSStringArray> *arrayOfArrayOfStrings;
+@end
diff --git a/test/ClangImporter/objc_parse.swift b/test/ClangImporter/objc_parse.swift
index 9063d02..2f10fe7 100644
--- a/test/ClangImporter/objc_parse.swift
+++ b/test/ClangImporter/objc_parse.swift
@@ -638,3 +638,8 @@
let _: () -> testStruct = testStruct.init
let _: (CInt) -> testStruct = testStruct.init
}
+
+// rdar://problem/34913507
+func testBridgedTypedef(bt: BridgedTypedefs) {
+ let _: Int = bt.arrayOfArrayOfStrings // expected-error{{'[[String]]'}}
+}