Skip to content

Commit ea4e514

Browse files
author
Greg Parker
authored
Merge pull request swiftlang#15584 from gparker42/swift-4.2-branch
[4.2] Use SwiftObject's old name when building for the pre-stable ABI.
2 parents 5ead4ad + 5aa2aad commit ea4e514

File tree

9 files changed

+28
-13
lines changed

9 files changed

+28
-13
lines changed

include/swift/AST/KnownIdentifiers.def

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,12 @@ IDENTIFIER(stringValue)
9595
IDENTIFIER(super)
9696
IDENTIFIER(superDecoder)
9797
IDENTIFIER(superEncoder)
98+
#if __APPLE__ && !SWIFT_DARWIN_ENABLE_STABLE_ABI_BIT
99+
// Pre-stable ABI uses un-mangled name for SwiftObject.
100+
IDENTIFIER(SwiftObject)
101+
#else
98102
IDENTIFIER_WITH_NAME(SwiftObject, "_TtCs12_SwiftObject")
103+
#endif
99104
IDENTIFIER(to)
100105
IDENTIFIER(toRaw)
101106
IDENTIFIER(Type)

stdlib/public/runtime/SwiftObject.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,13 @@
3030

3131
#if SWIFT_OBJC_INTEROP
3232

33+
#if __APPLE__ && !SWIFT_DARWIN_ENABLE_STABLE_ABI_BIT
34+
// Pre-stable ABI uses un-mangled name for SwiftObject
35+
#else
3336
// Source code: "SwiftObject"
3437
// Real class name: mangled "Swift._SwiftObject"
3538
#define SwiftObject _TtCs12_SwiftObject
39+
#endif
3640

3741
#if __has_attribute(objc_root_class)
3842
__attribute__((__objc_root_class__))

test/IRGen/class.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ sil_vtable C {}
3737
// \ CHECK: void ([[C_CLASS]]*)* @"$S5class1CCfD",
3838
// \ CHECK: i8** @"$SBoWV",
3939
// \ CHECK: i64 ptrtoint ([[OBJCCLASS]]* @"$S5class1CCMm" to i64),
40-
// \ CHECK: [[OBJCCLASS]]* @"OBJC_CLASS_$__TtCs12_SwiftObject",
40+
// \ CHECK: [[OBJCCLASS]]* @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
4141
// \ CHECK: [[OPAQUE]]* @_objc_empty_cache,
4242
// \ CHECK: [[OPAQUE]]* null,
4343
// \ CHECK: i64 add (i64 ptrtoint ({{.*}}* @_DATA__TtC5class1C to i64), i64 1)

test/IRGen/generic_classes.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ import Swift
9696
// CHECK-SAME-native: %swift.type* null,
9797
// CHECK-SAME-native: %swift.opaque* null,
9898
// CHECK-SAME-objc: i64 ptrtoint (%objc_class* @"$S15generic_classes14RootNonGenericCMm" to i64),
99-
// CHECK-SAME-objc: %objc_class* @"OBJC_CLASS_$__TtCs12_SwiftObject",
99+
// CHECK-SAME-objc: %objc_class* @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
100100
// CHECK-SAME-objc: %swift.opaque* @_objc_empty_cache,
101101
// CHECK-SAME: %swift.opaque* null,
102102
// CHECK-SAME-native: i64 1,

test/IRGen/objc_class_export.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
// CHECK-DAG: [[OBJC:%objc_object]] = type opaque
1717

1818
// CHECK: @"OBJC_METACLASS_$__TtC17objc_class_export3Foo" = hidden global %objc_class {
19-
// CHECK: %objc_class* @"OBJC_METACLASS_$__TtCs12_SwiftObject",
20-
// CHECK: %objc_class* @"OBJC_METACLASS_$__TtCs12_SwiftObject",
19+
// CHECK: %objc_class* @"OBJC_METACLASS_$_{{(_TtCs12_)?}}SwiftObject",
20+
// CHECK: %objc_class* @"OBJC_METACLASS_$_{{(_TtCs12_)?}}SwiftObject",
2121
// CHECK: %swift.opaque* @_objc_empty_cache,
2222
// CHECK: %swift.opaque* null,
2323
// CHECK: i64 ptrtoint ({{.*}}* @_METACLASS_DATA__TtC17objc_class_export3Foo to i64)
@@ -53,7 +53,7 @@
5353
// CHECK: void ([[FOO]]*)* @"$S17objc_class_export3FooCfD",
5454
// CHECK: i8** @"$SBOWV",
5555
// CHECK: i64 ptrtoint (%objc_class* @"OBJC_METACLASS_$__TtC17objc_class_export3Foo" to i64),
56-
// CHECK: %objc_class* @"OBJC_CLASS_$__TtCs12_SwiftObject",
56+
// CHECK: %objc_class* @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
5757
// CHECK: %swift.opaque* @_objc_empty_cache,
5858
// CHECK: %swift.opaque* null,
5959
// CHECK: i64 add (i64 ptrtoint ({{.*}}* @_DATA__TtC17objc_class_export3Foo to i64), i64 1),

test/IRGen/subclass.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
// CHECK: void ([[A]]*)* @"$S8subclass1ACfD",
1717
// CHECK: i8** @"$SBoWV",
1818
// CHECK: i64 ptrtoint ([[OBJC_CLASS]]* @"$S8subclass1ACMm" to i64),
19-
// CHECK: [[OBJC_CLASS]]* @"OBJC_CLASS_$__TtCs12_SwiftObject",
19+
// CHECK: [[OBJC_CLASS]]* @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
2020
// CHECK: [[OPAQUE]]* @_objc_empty_cache,
2121
// CHECK: [[OPAQUE]]* null,
2222
// CHECK: i64 add (i64 ptrtoint ({ {{.*}} }* @_DATA__TtC8subclass1A to i64), i64 1),

test/IRGen/vtable.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ sil @$S6vtable1CCfD : $@convention(method) (@owned C) -> ()
2323
// CHECK-objc: void ([[C]]*)* @"$S6vtable1CCfD",
2424
// CHECK-objc: i8** @"$SBoWV",
2525
// CHECK-objc: i64 ptrtoint (%objc_class* @"$S6vtable1CCMm" to i64),
26-
// CHECK-objc: %objc_class* @"OBJC_CLASS_$__TtCs12_SwiftObject",
26+
// CHECK-objc: %objc_class* @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
2727
// CHECK-objc: %swift.opaque* @_objc_empty_cache,
2828
// CHECK-objc: %swift.opaque* null,
2929
// CHECK-objc: i64 add (i64 ptrtoint ({ i32, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8* }* @_DATA__TtC6vtable1C to i64), i64 {{1|2}}),

test/stdlib/Inputs/SwiftObjectNSObject/SwiftObjectNSObject.m

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,14 @@
5252

5353
// Add methods to class SwiftObject that can be called by performSelector: et al
5454

55+
#if __APPLE__ && !SWIFT_DARWIN_ENABLE_STABLE_ABI_BIT
56+
// Pre-stable ABI uses un-mangled name for SwiftObject.
57+
#define SwiftObjectDemangledName "SwiftObject"
58+
#else
5559
// mangled Swift._SwiftObject
5660
#define SwiftObject _TtCs12_SwiftObject
61+
#define SwiftObjectDemangledName "Swift._SwiftObject"
62+
#endif
5763

5864
@interface SwiftObject /* trust me, I know what I'm doing */ @end
5965
@implementation SwiftObject (MethodsToPerform)
@@ -77,7 +83,7 @@ void TestSwiftObjectNSObject(id c, id d)
7783
{
7884
printf("TestSwiftObjectNSObject\n");
7985

80-
Class S = objc_getClass("Swift._SwiftObject");
86+
Class S = objc_getClass(SwiftObjectDemangledName);
8187
Class C = objc_getClass("SwiftObjectNSObject.C");
8288
Class D = objc_getClass("SwiftObjectNSObject.D");
8389

@@ -405,10 +411,10 @@ void TestSwiftObjectNSObject(id c, id d)
405411
expectTrue ([[c description] isEqual:@"SwiftObjectNSObject.C"]);
406412
expectTrue ([[D description] isEqual:@"SwiftObjectNSObject.D"]);
407413
expectTrue ([[C description] isEqual:@"SwiftObjectNSObject.C"]);
408-
expectTrue ([[S description] isEqual:@"Swift._SwiftObject"]);
414+
expectTrue ([[S description] isEqual:@ SwiftObjectDemangledName]);
409415
expectTrue ([[D_meta description] isEqual:@"SwiftObjectNSObject.D"]);
410416
expectTrue ([[C_meta description] isEqual:@"SwiftObjectNSObject.C"]);
411-
expectTrue ([[S_meta description] isEqual:@"Swift._SwiftObject"]);
417+
expectTrue ([[S_meta description] isEqual:@ SwiftObjectDemangledName]);
412418

413419
// NSLog() calls -description and also some private methods.
414420
// This output is checked by FileCheck in SwiftObjectNSObject.swift.
@@ -423,10 +429,10 @@ void TestSwiftObjectNSObject(id c, id d)
423429
expectTrue ([[c debugDescription] isEqual:@"SwiftObjectNSObject.C"]);
424430
expectTrue ([[D debugDescription] isEqual:@"SwiftObjectNSObject.D"]);
425431
expectTrue ([[C debugDescription] isEqual:@"SwiftObjectNSObject.C"]);
426-
expectTrue ([[S debugDescription] isEqual:@"Swift._SwiftObject"]);
432+
expectTrue ([[S debugDescription] isEqual:@ SwiftObjectDemangledName]);
427433
expectTrue ([[D_meta debugDescription] isEqual:@"SwiftObjectNSObject.D"]);
428434
expectTrue ([[C_meta debugDescription] isEqual:@"SwiftObjectNSObject.C"]);
429-
expectTrue ([[S_meta debugDescription] isEqual:@"Swift._SwiftObject"]);
435+
expectTrue ([[S_meta debugDescription] isEqual:@ SwiftObjectDemangledName]);
430436

431437

432438
printf("NSObjectProtocol.performSelector\n");

test/stdlib/SwiftObjectNSObject.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestSwiftObjectNSObject(_ c: C, _ d: D)
4040
// This check is for NSLog() output from TestSwiftObjectNSObject().
4141
// CHECK: c ##SwiftObjectNSObject.C##
4242
// CHECK-NEXT: d ##SwiftObjectNSObject.D##
43-
// CHECK-NEXT: S ##Swift._SwiftObject##
43+
// CHECK-NEXT: S ##{{(Swift._)?}}SwiftObject##
4444

4545
TestSwiftObjectNSObject(C(), D())
4646
// does not return

0 commit comments

Comments
 (0)