|
| 1 | +// RUN: %target-swift-frontend -emit-ir %s -swift-version 5 -target %target-cpu-apple-macosx11.0 -module-name actor_class_objc | %IRGenFileCheck %s |
| 2 | +// REQUIRES: concurrency |
| 3 | +// REQUIRES: objc_interop |
| 4 | +// REQUIRES: OS=macosx |
| 5 | + |
| 6 | +import Foundation |
| 7 | + |
| 8 | +// CHECK: %T16actor_class_objc7MyClassC = type <{ %swift.refcounted, %swift.defaultactor, %TSi }> |
| 9 | +// CHECK: %swift.defaultactor = type { [12 x i8*] } |
| 10 | + |
| 11 | +// CHECK-LABEL: @"OBJC_METACLASS_$__TtC16actor_class_objc7MyClass" = global |
| 12 | +// Metaclass is an instance of the root class. |
| 13 | +// CHECK-SAME: %objc_class* {{.*}}@"OBJC_METACLASS_$_NSObject{{(.ptrauth)?}}" |
| 14 | + |
| 15 | +// CHECK: @"$s16actor_class_objc7MyClassCMf" = internal global |
| 16 | +// CHECK-SAME: @"$s16actor_class_objc7MyClassCfD{{(.ptrauth)?}}" |
| 17 | +// CHECK-SAME: @"OBJC_METACLASS_$__TtC16actor_class_objc7MyClass{{(.ptrauth)?}}" |
| 18 | +// CHECK-SAME: @"OBJC_CLASS_$_NSObject{{(.ptrauth)?}}" |
| 19 | +// Flags: uses Swift refcounting |
| 20 | +// CHECK-SAME: i32 2, |
| 21 | +// Instance size |
| 22 | +// CHECK-64-SAME: i32 120, |
| 23 | +// CHECK-32-SAME: i32 60, |
| 24 | +// Alignment mask |
| 25 | +// CHECK-64-SAME: i16 15, |
| 26 | +// CHECK-32-SAME: i16 7, |
| 27 | +// Field offset for 'x' |
| 28 | +// CHECK-64-SAME: i64 112, |
| 29 | +// CHECK-32-SAME: i32 56, |
| 30 | + |
| 31 | +@objc public actor MyClass { |
| 32 | + public var x: Int |
| 33 | + public init() { self.x = 0 } |
| 34 | +} |
| 35 | + |
| 36 | +// CHECK: [[SWIFT_NATIVE_NSOBJECT_NAME:@.*]] = private unnamed_addr constant [20 x i8] c"SwiftNativeNSObject\00" |
| 37 | + |
| 38 | +// CHECK: @llvm.global_ctors = appending global |
| 39 | +// CHECK-SAME: _swift_objc_actor_initialization |
| 40 | + |
| 41 | + |
| 42 | +// CHECK-LABEL: define {{.*}} @"$s16actor_class_objc7MyClassC1xSivg" |
| 43 | +// CHECK: [[T0:%.*]] = getelementptr inbounds %T16actor_class_objc7MyClassC, %T16actor_class_objc7MyClassC* %0, i32 0, i32 2 |
| 44 | +// CHECK: [[T1:%.*]] = getelementptr inbounds %TSi, %TSi* [[T0]], i32 0, i32 0 |
| 45 | +// CHECK: load [[INT]], [[INT]]* [[T1]], align |
| 46 | + |
| 47 | +// CHECK-LABEL: define {{.*}}swiftcc %T16actor_class_objc7MyClassC* @"$s16actor_class_objc7MyClassCACycfc" |
| 48 | +// CHECK: swift_defaultActor_initialize |
| 49 | +// CHECK-LABEL: ret %T16actor_class_objc7MyClassC* |
| 50 | + |
| 51 | +// CHECK: swift_defaultActor_destroy |
| 52 | + |
| 53 | +// CHECK-LABEL: define private void @_swift_objc_actor_initialization() |
| 54 | +// CHECK: [[SWIFT_NATIVE_NSOBJECT_CLASS:%.*]] = call %objc_class* @objc_getRequiredClass(i8* getelementptr inbounds ([20 x i8], [20 x i8]* [[SWIFT_NATIVE_NSOBJECT_NAME]] |
| 55 | +// CHECK: [[ACTOR_RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s16actor_class_objc7MyClassCMa"( |
| 56 | +// CHECK: [[ACTOR_METADATA:%.*]] = extractvalue %swift.metadata_response [[ACTOR_RESPONSE]], 0 |
| 57 | +// CHECK: [[ACTOR_CLASS:%.*]] = bitcast %swift.type* [[ACTOR_METADATA]] to %objc_class* |
| 58 | +// CHECK: call %objc_class* @class_setSuperclass(%objc_class* [[ACTOR_CLASS]], %objc_class* [[SWIFT_NATIVE_NSOBJECT_CLASS]]) |
| 59 | + |
0 commit comments