// RUN: %target-swift-frontend -import-objc-header %S/Inputs/extension-generic-objc-protocol.h -typecheck -verify %s // REQUIRES: objc_interop import Foundation @objc protocol P {} @objc protocol Q {} @objc protocol R {} public class C1 {} extension C1: P {} // expected-error@-1 {{conformance of generic class 'C1' to '@objc' protocol 'P' cannot be in an extension}} public class C2 {} public class C3 : C2 {} extension C3: P {} class Outer { class Inner {} class Inner2 {} } extension Outer.Inner: P {} // expected-error@-1 {{conformance of class from generic context 'Outer.Inner' to '@objc' protocol 'P' cannot be in an extension}} class SubInner: Outer.Inner2 {} extension SubInner: P {} // Lightweight generic ObjC classes can still be extended to conform. extension OBJCGeneric: OBJCProtocol1 {} extension OBJCGeneric: P {} extension OBJCGenericSubclass: OBJCProtocol2 {} extension OBJCGenericSubclass: Q {} extension OBJCNongenericSubclass: OBJCProtocol3 {} extension OBJCNongenericSubclass: R {} public class SwiftSubclassOfObjCGeneric: OBJCGeneric {} extension SwiftSubclassOfObjCGeneric: OBJCProtocol2 {} extension SwiftSubclassOfObjCGeneric: Q {} public class SwiftGenericSubclassOfObjCGeneric : OBJCGeneric {} extension SwiftGenericSubclassOfObjCGeneric: OBJCProtocol2 {} // expected-error {{cannot be in an extension}} extension SwiftGenericSubclassOfObjCGeneric: Q {} // expected-error {{cannot be in an extension}} public class SwiftNongenericSubclassOfGenericSubclassOfObjCGeneric : SwiftGenericSubclassOfObjCGeneric {} extension SwiftNongenericSubclassOfGenericSubclassOfObjCGeneric: OBJCProtocol3 {} extension SwiftNongenericSubclassOfGenericSubclassOfObjCGeneric: R {}