// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s // REQUIRES: objc_interop // CHECK: @_METACLASS_DATA__TtC31class_forbid_objc_assoc_objects24AllowedToHaveAssocObject = internal constant { {{.*}} } { i32 129, // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects24AllowedToHaveAssocObject = internal constant { {{.*}} } { i32 128, final class AllowedToHaveAssocObject { } // CHECK: @_METACLASS_DATA__TtC31class_forbid_objc_assoc_objects24UnableToHaveAssocObjects = internal constant { {{.*}} } { i32 1153, // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects24UnableToHaveAssocObjects = internal constant { {{.*}} } { i32 1152, @_semantics("objc.forbidAssociatedObjects") final class UnableToHaveAssocObjects { } // Class Metadata For Generic Metadata // // CHECK: [[CLASS_METADATA:@[0-9][0-9]*]] = internal constant <{ {{.*}} }> <{ {{.*}} { i32 1152, // // Generic Metadata Pattern // // CHECK: @"$s31class_forbid_objc_assoc_objects31UnableToHaveAssocObjectsGenericCMP" = internal constant {{.*}}[[CLASS_METADATA]] @_semantics("objc.forbidAssociatedObjects") final class UnableToHaveAssocObjectsGeneric { var state: T init(state: T) { self.state = state } } // This should be normal. // // CHECK: @_METACLASS_DATA__TtC31class_forbid_objc_assoc_objects40UnsoundAbleToHaveAssocObjectsParentClass = internal constant { {{.*}} } { i32 129, // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects40UnsoundAbleToHaveAssocObjectsParentClass = internal constant { {{.*}} } { i32 128, class UnsoundAbleToHaveAssocObjectsParentClass { } // This should have assoc object constraints // // CHECK: @_METACLASS_DATA__TtC31class_forbid_objc_assoc_objects39UnsoundUnableToHaveAssocObjectsSubClass = internal constant { {{.*}} } { i32 1153, // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects39UnsoundUnableToHaveAssocObjectsSubClass = internal constant { {{.*}} } { i32 1152, @_semantics("objc.forbidAssociatedObjects") final class UnsoundUnableToHaveAssocObjectsSubClass : UnsoundAbleToHaveAssocObjectsParentClass { } // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects41UnsoundAbleToHaveAssocObjectsParentClass2 = internal constant { {{.*}} } { i32 1152, @_semantics("objc.forbidAssociatedObjects") class UnsoundAbleToHaveAssocObjectsParentClass2 { } // This has normal metadata. We must at runtime add the flags of the subclass to // the child. // // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects40UnsoundUnableToHaveAssocObjectsSubClass2 = internal constant { {{.*}} } { i32 128, final class UnsoundUnableToHaveAssocObjectsSubClass2 : UnsoundAbleToHaveAssocObjectsParentClass2 { } // CHECK: @_DATA__TtC31class_forbid_objc_assoc_objects40UnsoundUnableToHaveAssocObjectsSubClass3 = internal constant { {{.*}} } { i32 128, class UnsoundUnableToHaveAssocObjectsSubClass3 : UnsoundAbleToHaveAssocObjectsParentClass2 { } class GenericAbleToHaveAssocObjectsParentClass { public var state: T init(state: T) { self.state = state } } @_semantics("objc.forbidAssociatedObjects") final class GenericUnableToHaveAssocObjectsSubClass : GenericAbleToHaveAssocObjectsParentClass { } @_semantics("objc.forbidAssociatedObjects") class GenericAbleToHaveAssocObjectsParentClass2 { public var state: T init(state: T) { self.state = state } } final class GenericUnableToHaveAssocObjectsSubClass2 : GenericAbleToHaveAssocObjectsParentClass2 { } class GenericUnableToHaveAssocObjectsSubClass3 : GenericAbleToHaveAssocObjectsParentClass2 { }