mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
327 lines
13 KiB
Swift
327 lines
13 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %build-irgen-test-overlays
|
|
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize %s
|
|
|
|
// UNSUPPORTED: OS=watchos
|
|
|
|
// REQUIRES: objc_interop
|
|
|
|
// The order of the output seems to change between asserts/noasserts build of
|
|
// the stlib.
|
|
// REQUIRES: swift_stdlib_asserts
|
|
|
|
// CHECK: [[OBJC_CLASS:%objc_class]] = type
|
|
// CHECK: [[OPAQUE:%swift.opaque]] = type
|
|
// CHECK: [[INT:%TSi]] = type <{ [[LLVM_PTRSIZE_INT:i(32|64)]] }>
|
|
|
|
// CHECK-32: @"$s13objc_subclass10SwiftGizmoC1xSivpWvd" = hidden global i32 4, align [[WORD_SIZE_IN_BYTES:4]]
|
|
// CHECK-64: @"$s13objc_subclass10SwiftGizmoC1xSivpWvd" = hidden global i64 8, align [[WORD_SIZE_IN_BYTES:8]]
|
|
|
|
// CHECK: @"OBJC_METACLASS_$__TtC13objc_subclass10SwiftGizmo" = hidden global [[OBJC_CLASS]] { ptr @"OBJC_METACLASS_$_NSObject", ptr @"OBJC_METACLASS_$_Gizmo", ptr @_objc_empty_cache, ptr null, [[LLVM_PTRSIZE_INT]] ptrtoint ({{.*}} @_METACLASS_DATA__TtC13objc_subclass10SwiftGizmo to [[LLVM_PTRSIZE_INT]]) }
|
|
|
|
// CHECK-32: @_METACLASS_DATA__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}ptr } {
|
|
// CHECK-32: i32 129,
|
|
// CHECK-32: i32 20,
|
|
// CHECK-32: i32 20,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr @.str.31._TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr null
|
|
// CHECK-32: }, section "__DATA, {{.*}}", align 4
|
|
|
|
// CHECK-64: @_METACLASS_DATA__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}ptr } {
|
|
// CHECK-64: i32 129,
|
|
// CHECK-64: i32 40,
|
|
// CHECK-64: i32 40,
|
|
// CHECK-64: i32 0,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr @.str.31._TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr null
|
|
// CHECK-64: }, section "__DATA, {{.*}}", align 8
|
|
|
|
// CHECK-32: @_INSTANCE_METHODS__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}] } {
|
|
// CHECK-32: i32 12,
|
|
// CHECK-32: i32 11,
|
|
// CHECK-32: [11 x { ptr, ptr, ptr }] [{ ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(x)",
|
|
// CHECK-32: ptr @".str.6.l8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC1xSivgTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(setX:)",
|
|
// CHECK-32: ptr @".str.9.v12@0:4l8",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC1xSivsTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(getX)",
|
|
// CHECK-32: ptr @".str.6.l8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC4getXSiyFTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(duplicate)",
|
|
// CHECK-32: ptr @".str.6.@8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC9duplicateSo0D0CyFTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(init)",
|
|
// CHECK-32: ptr @".str.6.@8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoCACycfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(initWithInt:string:)",
|
|
// CHECK-32: ptr @".str.12.@16@0:4l8@12",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC3int6stringACSi_SStcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(dealloc)",
|
|
// CHECK-32: ptr @".str.6.v8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoCfDTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(isEnabled)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC7enabledSbvgTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(setIsEnabled:)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC7enabledSbvsTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(initWithBellsOn:)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC7bellsOnACSgSi_tcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, { ptr, ptr, ptr } {
|
|
// CHECK-32: ptr @"\01L_selector_data(.cxx_construct)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoCfeTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }]
|
|
// CHECK-32: }, section "__DATA, {{.*}}", align 4
|
|
|
|
// CHECK-64: @_INSTANCE_METHODS__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}] } {
|
|
// CHECK-64: i32 24,
|
|
// CHECK-64: i32 11,
|
|
// CHECK-64: [11 x { ptr, ptr, ptr }] [{
|
|
// CHECK-64: ptr @"\01L_selector_data(x)",
|
|
// CHECK-64: ptr @".str.7.q16@0:8"
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC1xSivgTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(setX:)",
|
|
// CHECK-64: ptr @".str.10.v24@0:8q16"
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC1xSivsTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(getX)",
|
|
// CHECK-64: ptr @".str.7.q16@0:8"
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC4getXSiyFTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(duplicate)",
|
|
// CHECK-64: ptr @".str.7.@16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC9duplicateSo0D0CyFTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(init)",
|
|
// CHECK-64: ptr @".str.7.@16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoCACycfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(initWithInt:string:)",
|
|
// CHECK-64: ptr @".str.13.@32@0:8q16@24",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC3int6stringACSi_SStcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(dealloc)",
|
|
// CHECK-64: ptr @".str.7.v16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoCfDTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(isEnabled)",
|
|
// CHECK-64: ptr @".str.7.{{[Bc]}}16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC7enabledSbvgTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(setIsEnabled:)",
|
|
// CHECK-64: ptr @".str.10.v20@0:8{{[Bc]}}16",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC7enabledSbvsTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(initWithBellsOn:)",
|
|
// CHECK-64: ptr @".str.10.@24@0:8q16",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC7bellsOnACSgSi_tcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(.cxx_construct)",
|
|
// CHECK-64: ptr @".str.7.v16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoCfeTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }]
|
|
// CHECK-64: }, section "__DATA, {{.*}}", align 8
|
|
|
|
// CHECK-32: @_IVARS__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}] } {
|
|
// CHECK-32: i32 20,
|
|
// CHECK-32: i32 1,
|
|
// CHECK-32: [1 x { ptr, ptr, ptr, i32, i32 }] [{ ptr, ptr, ptr, i32, i32 } {
|
|
// CHECK-32: ptr @"$s13objc_subclass10SwiftGizmoC1xSivpWvd",
|
|
// CHECK-32: ptr @.str.1.x,
|
|
// CHECK-32: ptr {{.*}},
|
|
// CHECK-32: i32 2,
|
|
// CHECK-32: i32 4 }]
|
|
// CHECK-32: }, section "__DATA, {{.*}}", align 4
|
|
|
|
// CHECK-64: @_IVARS__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}] } {
|
|
// CHECK-64: i32 32,
|
|
// CHECK-64: i32 1,
|
|
// CHECK-64: [1 x { ptr, ptr, ptr, i32, i32 }] [{ ptr, ptr, ptr, i32, i32 } {
|
|
// CHECK-64: ptr @"$s13objc_subclass10SwiftGizmoC1xSivpWvd",
|
|
// CHECK-64: ptr @.str.1.x,
|
|
// CHECK-64: ptr @.str.0.,
|
|
// CHECK-64: i32 3,
|
|
// CHECK-64: i32 8 }]
|
|
// CHECK-64: }, section "__DATA, {{.*}}", align 8
|
|
|
|
// CHECK-32: @_DATA__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}ptr } {
|
|
// CHECK-32: i32 132,
|
|
// CHECK-32: i32 4,
|
|
// CHECK-32: i32 8,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: ptr @.str.31._TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-32: @_INSTANCE_METHODS__TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: @_IVARS__TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-32: ptr null,
|
|
// CHECK-32: @_PROPERTIES__TtC13objc_subclass10SwiftGizmo
|
|
// CHECK-32: }, section "__DATA, {{.*}}", align 4
|
|
|
|
// CHECK-64: @_DATA__TtC13objc_subclass10SwiftGizmo = internal constant { {{.*}}ptr } {
|
|
// CHECK-64: i32 132,
|
|
// CHECK-64: i32 8,
|
|
// CHECK-64: i32 16,
|
|
// CHECK-64: i32 0,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: ptr @.str.31._TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-64: @_INSTANCE_METHODS__TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: @_IVARS__TtC13objc_subclass10SwiftGizmo,
|
|
// CHECK-64: ptr null,
|
|
// CHECK-64: @_PROPERTIES__TtC13objc_subclass10SwiftGizmo
|
|
// CHECK-64: }, section "__DATA, {{.*}}", align 8
|
|
|
|
// CHECK-NOT: @_TMCSo13SwiftGizmo = {{.*NSObject}}
|
|
|
|
// CHECK: @_INSTANCE_METHODS__TtC13objc_subclass12GenericGizmo
|
|
|
|
// CHECK-32: [[SETTER_ENCODING:@.*]] = private unnamed_addr constant [10 x i8] c"v12@0:4@8\00"
|
|
// CHECK-64: [[SETTER_ENCODING:@.*]] = private unnamed_addr constant [11 x i8] c"v24@0:8@16\00"
|
|
|
|
// CHECK-32: @_INSTANCE_METHODS__TtC13objc_subclass11SwiftGizmo2 = internal constant { i32, i32, [5 x { ptr, ptr, ptr }] } {
|
|
// CHECK-32: i32 12,
|
|
// CHECK-32: i32 5,
|
|
// CHECK-32: [5 x { ptr, ptr, ptr }] [
|
|
// CHECK-32: {
|
|
// CHECK-32: ptr @"\01L_selector_data(sg)",
|
|
// CHECK-32: ptr @".str.6.@8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass11SwiftGizmo2C2sgAA0C5GizmoCvgTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, {
|
|
// CHECK-32: ptr @"\01L_selector_data(setSg:)",
|
|
// CHECK-32: ptr [[SETTER_ENCODING]],
|
|
// CHECK-32: ptr @"$s13objc_subclass11SwiftGizmo2C2sgAA0C5GizmoCvsTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, {
|
|
// CHECK-32: ptr @"\01L_selector_data(init)",
|
|
// CHECK-32: ptr @".str.6.@8@0:4",
|
|
// CHECK-32: ptr @"$s13objc_subclass11SwiftGizmo2CACycfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, {
|
|
// CHECK-32: ptr @"\01L_selector_data(initWithBellsOn:)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass11SwiftGizmo2C7bellsOnACSgSi_tcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }, {
|
|
// CHECK-32: ptr @"\01L_selector_data(.cxx_destruct)",
|
|
// CHECK-32: ptr {{@".str.[^"]+"}},
|
|
// CHECK-32: ptr @"$s13objc_subclass11SwiftGizmo2CfETo{{(\.ptrauth)?}}"
|
|
// CHECK-32: }
|
|
// CHECK-32: ]
|
|
// CHECK-32: }, section "__DATA, {{.*}}", align 4
|
|
|
|
// CHECK-64: @_INSTANCE_METHODS__TtC13objc_subclass11SwiftGizmo2 = internal constant { i32, {{.*}}] } {
|
|
// CHECK-64: i32 24,
|
|
// CHECK-64: i32 5,
|
|
// CHECK-64: [5 x { ptr, ptr, ptr }] [
|
|
// CHECK-64: {
|
|
// CHECK-64: ptr @"\01L_selector_data(sg)",
|
|
// CHECK-64: ptr @".str.7.@16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass11SwiftGizmo2C2sgAA0C5GizmoCvgTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(setSg:)",
|
|
// CHECK-64: ptr [[SETTER_ENCODING]],
|
|
// CHECK-64: ptr @"$s13objc_subclass11SwiftGizmo2C2sgAA0C5GizmoCvsTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(init)",
|
|
// CHECK-64: ptr @".str.7.@16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass11SwiftGizmo2CACycfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(initWithBellsOn:)",
|
|
// CHECK-64: ptr @".str.10.@24@0:8q16",
|
|
// CHECK-64: ptr @"$s13objc_subclass11SwiftGizmo2C7bellsOnACSgSi_tcfcTo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }, {
|
|
// CHECK-64: ptr @"\01L_selector_data(.cxx_destruct)",
|
|
// CHECK-64: ptr @".str.7.v16@0:8",
|
|
// CHECK-64: ptr @"$s13objc_subclass11SwiftGizmo2CfETo{{(\.ptrauth)?}}"
|
|
// CHECK-64: }
|
|
// CHECK-64: ] }
|
|
|
|
|
|
// CHECK: @"objc_classes_$s13objc_subclass10SwiftGizmoCN" = internal global ptr @"$s13objc_subclass10SwiftGizmoCN", section "__DATA,__objc_classlist,regular,no_dead_strip", no_sanitize_address, align [[WORD_SIZE_IN_BYTES]]
|
|
// CHECK: @"objc_classes_$s13objc_subclass11SwiftGizmo2CN" = internal global ptr @"$s13objc_subclass11SwiftGizmo2CN", section "__DATA,__objc_classlist,regular,no_dead_strip", no_sanitize_address, align [[WORD_SIZE_IN_BYTES]]
|
|
|
|
// CHECK: @objc_non_lazy_classes = internal global [1 x ptr] [ptr @"$s13objc_subclass11SwiftGizmo2CN"], section "__DATA,__objc_nlclslist,regular,no_dead_strip", no_sanitize_address, align [[WORD_SIZE_IN_BYTES]]
|
|
|
|
import Foundation
|
|
import gizmo
|
|
|
|
@requires_stored_property_inits
|
|
class SwiftGizmo : Gizmo {
|
|
@objc var x = Int()
|
|
|
|
@objc func getX() -> Int {
|
|
return x
|
|
}
|
|
|
|
override func duplicate() -> Gizmo {
|
|
return SwiftGizmo()
|
|
}
|
|
|
|
override init() {
|
|
super.init(bellsOn:0)
|
|
}
|
|
|
|
@objc init(int i: Int, string str : String) {
|
|
super.init(bellsOn:i)
|
|
}
|
|
|
|
deinit { var x = 10 }
|
|
|
|
@objc var enabled: Bool {
|
|
@objc(isEnabled) get {
|
|
return true
|
|
}
|
|
|
|
@objc(setIsEnabled:) set {
|
|
}
|
|
}
|
|
}
|
|
|
|
class GenericGizmo<T> : Gizmo {
|
|
@objc func foo() {}
|
|
|
|
@objc var x : Int {
|
|
return 0
|
|
}
|
|
|
|
var array : [T] = []
|
|
}
|
|
// CHECK: define hidden swiftcc [[LLVM_PTRSIZE_INT]] @"$s13objc_subclass12GenericGizmoC1xSivg"(
|
|
|
|
var sg = SwiftGizmo()
|
|
sg.duplicate()
|
|
|
|
@_objc_non_lazy_realization
|
|
class SwiftGizmo2 : Gizmo {
|
|
@objc var sg : SwiftGizmo
|
|
|
|
override init() {
|
|
sg = SwiftGizmo()
|
|
super.init()
|
|
}
|
|
|
|
deinit { }
|
|
}
|
|
|