mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
ObjC ivar metadata has up to now emitted an empty string for the ivar's objc type encoding. Conversely, ObjC property metadata is emitted with an objc type encoding. This changes the compiler to also emit an objc type encoding for ivars. The motivation for this change is for lldb to print ivars of classes declared in Objective-C but implemented in Swift, as defined in [SE-0436](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0436-objc-implementation.md). Without the presence of type encoding for ivars, lldb is unable to present to the user the ivars/properties of instances of such classes. rdar://138569299
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.1.q,
|
|
// 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 { }
|
|
}
|
|
|