diff --git a/lib/PrintAsClang/ModuleContentsWriter.cpp b/lib/PrintAsClang/ModuleContentsWriter.cpp index ef164898bbaed..665bf42894308 100644 --- a/lib/PrintAsClang/ModuleContentsWriter.cpp +++ b/lib/PrintAsClang/ModuleContentsWriter.cpp @@ -580,7 +580,8 @@ class ModuleWriter { else if (isa(TD) && NTD->hasClangNode()) emitReferencedClangTypeMetadata(NTD); else if (const auto *cd = dyn_cast(TD)) - if (cd->isObjC() || cd->isForeignReferenceType()) + if ((cd->isObjC() && cd->getClangDecl()) || + cd->isForeignReferenceType()) emitReferencedClangTypeMetadata(NTD); } else if (auto TAD = dyn_cast(TD)) { if (TAD->hasClangNode()) diff --git a/test/Interop/ObjCToSwiftToObjCxx/bridge-objc-types-back-to-objcxx.swift b/test/Interop/ObjCToSwiftToObjCxx/bridge-objc-types-back-to-objcxx.swift index 29cd07ef200ea..934553a28eba5 100644 --- a/test/Interop/ObjCToSwiftToObjCxx/bridge-objc-types-back-to-objcxx.swift +++ b/test/Interop/ObjCToSwiftToObjCxx/bridge-objc-types-back-to-objcxx.swift @@ -88,10 +88,17 @@ public func retObjCClassArray() -> [ObjCKlass] { return [] } +public class KVOCookieMonster { + public static func += (lhs: KVOCookieMonster, rhs: NSKeyValueObservation) { + lhs.cookies.append(rhs) + } + + private var cookies = Array() +} + // CHECK: @interface HasBlockField : NSObject // CHECK: @property (nonatomic, copy) void (^ _Nullable foo)(ObjCKlassState); // CHECK: @end - // CHECK: SWIFT_EXTERN id _Nonnull $s9UseObjCTy03retB9CProtocolSo0bE0_pyF(void) SWIFT_NOEXCEPT SWIFT_CALL; // retObjCProtocol() // CHECK-NEXT: #endif // CHECK-NEXT: #if defined(__OBJC__)