[Type checker] Marking a class as @objc doesn’t require an interface type.

Fixes the crash in SR-8540 / rdar://problem/43383512.
This commit is contained in:
Doug Gregor
2018-08-20 10:05:13 -07:00
parent bb6272b194
commit e15f67e453
4 changed files with 19 additions and 2 deletions

View File

@@ -1520,11 +1520,11 @@ void markAsObjC(ValueDecl *D, ObjCReason reason,
attr->setInvalid(); attr->setInvalid();
} }
if (!D->hasInterfaceType()) { if (!isa<TypeDecl>(D) && !D->hasInterfaceType()) {
ctx.getLazyResolver()->resolveDeclSignature(D); ctx.getLazyResolver()->resolveDeclSignature(D);
} }
if (!isa<AccessorDecl>(D)) { if (!isa<AccessorDecl>(D) && !isa<TypeDecl>(D)) {
useObjectiveCBridgeableConformances(D->getInnermostDeclContext(), useObjectiveCBridgeableConformances(D->getInnermostDeclContext(),
D->getInterfaceType()); D->getInterfaceType());
} }

View File

@@ -0,0 +1,7 @@
@import Foundation;
@class SwiftClass;
@protocol ObjCProtocol
@optional
-(void)method:(nullable SwiftClass *)object;
@end

View File

@@ -0,0 +1,3 @@
import Foundation
@objc class SwiftClass : NSObject { }

View File

@@ -0,0 +1,7 @@
// RUN: %target-swift-frontend -module-name test -emit-ir -primary-file %s %S/Inputs/objc-protocol-other.swift -import-objc-header %S/Inputs/objc-protocol-bridging.h -sdk %sdk -o %t.o
// REQUIRES: objc_interop
import Foundation
@objc class Foo : NSObject, ObjCProtocol { }