Skip to content

Commit 8c3bf56

Browse files
author
Greg Parker
authored
[IRGen] Fix some is-stable-ABI marker bits. (#14004) (#14022)
* Don't emit "stable ABI masquerading as legacy ABI" bit state yet. * Don't unconditionally emit bit value 1 in generic class templates. rdar://36612173
1 parent 491e278 commit 8c3bf56

File tree

5 files changed

+20
-9
lines changed

5 files changed

+20
-9
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3339,6 +3339,12 @@ namespace {
33393339
void addClassFlags() {
33403340
auto flags = ClassFlags();
33413341

3342+
#if !SWIFT_DARWIN_ENABLE_STABLE_ABI_BIT
3343+
// FIXME: Remove this after enabling stable ABI.
3344+
// This bit is NOT conditioned on UseDarwinPreStableABIBit.
3345+
flags |= ClassFlags::IsSwiftPreStableABI;
3346+
#endif
3347+
33423348
// Set a flag if the class uses Swift refcounting.
33433349
auto type = Target->getDeclaredType()->getCanonicalType();
33443350
if (getReferenceCountingForType(IGM, type)
@@ -3878,7 +3884,12 @@ namespace {
38783884
// The rodata pointer will be instantiated here.
38793885
// Make sure we at least set the 'is Swift class' bit, though.
38803886
ClassRODataPtrOffset = getNextOffsetFromTemplateHeader();
3881-
B.addInt(IGM.MetadataKindTy, 1);
3887+
if (!IGM.ObjCInterop) {
3888+
// FIXME: Remove null data altogether rdar://problem/18801263
3889+
B.addInt(IGM.MetadataKindTy, 1);
3890+
} else {
3891+
B.addInt(IGM.MetadataKindTy, IGM.UseDarwinPreStableABIBit ? 1 : 2);
3892+
}
38823893
}
38833894

38843895
void addDependentData() {

test/IRGen/generic_types.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
// CHECK-objc-SAME: %swift.opaque* @_objc_empty_cache,
2525
// CHECK-SAME: %swift.opaque* null,
2626
// CHECK-SAME: i64 {{1|2}},
27-
// CHECK-SAME: i32 2,
27+
// CHECK-SAME: i32 {{3|2}},
2828
// CHECK-SAME: i32 0,
2929
// CHECK-SAME: i32 24,
3030
// CHECK-SAME: i16 7,
@@ -53,7 +53,7 @@
5353
// CHECK-objc-SAME: %swift.opaque* @_objc_empty_cache,
5454
// CHECK-SAME: %swift.opaque* null,
5555
// CHECK-SAME: i64 {{1|2}},
56-
// CHECK-SAME: i32 2,
56+
// CHECK-SAME: i32 {{3|2}},
5757
// CHECK-SAME: i32 0,
5858
// CHECK-SAME: i32 24,
5959
// CHECK-SAME: i16 7,
@@ -75,7 +75,7 @@
7575
// CHECK-objc-SAME: %swift.opaque* @_objc_empty_cache,
7676
// CHECK-SAME: %swift.opaque* null,
7777
// CHECK-SAME: i64 {{1|2}},
78-
// CHECK-SAME: i32 2,
78+
// CHECK-SAME: i32 {{3|2}},
7979
// CHECK-SAME: i32 0,
8080
// CHECK-SAME: i32 24,
8181
// CHECK-SAME: i16 7,
@@ -97,7 +97,7 @@
9797
// CHECK-objc-SAME: %swift.opaque* @_objc_empty_cache,
9898
// CHECK-SAME: %swift.opaque* null,
9999
// CHECK-SAME: i64 {{1|2}},
100-
// CHECK-SAME: i32 2,
100+
// CHECK-SAME: i32 {{3|2}},
101101
// CHECK-SAME: i32 0,
102102
// CHECK-SAME: i32 24,
103103
// CHECK-SAME: i16 7,

test/IRGen/ivar_destroyer.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
// \ CHECK: [[OPAQUE]]* @_objc_empty_cache,
1616
// \ CHECK: [[OPAQUE]]* null,
1717
// \ CHECK: i64 add (i64 ptrtoint ({{.*}}* @_DATA__TtC14ivar_destroyer17NonTrivialDerived to i64), i64 {{1|2}}),
18-
// \ CHECK: i32 2,
18+
// \ CHECK: i32 {{3|2}},
1919
// \ CHECK: i32 0,
2020
// \ CHECK: i32 24,
2121
// \ CHECK: i16 7,

test/IRGen/objc_attr_NSManaged.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ sil_vtable X {}
2727
// The getter/setter should not show up in the Swift metadata.
2828
/* FIXME: sil_vtable parser picks the wrong 'init' overload. Both vtable entries
2929
ought to be nonnull here. rdar://problem/19572342 */
30-
// CHECK: @"$S19objc_attr_NSManaged10SwiftGizmoCMf" = internal global <{ {{.*}} }> <{ void (%T19objc_attr_NSManaged10SwiftGizmoC*)* @"$S19objc_attr_NSManaged10SwiftGizmoCfD", i8** @"$SBOWV", i64 ptrtoint (%objc_class* @"OBJC_METACLASS_$__TtC19objc_attr_NSManaged10SwiftGizmo" to i64), %objc_class* @"OBJC_CLASS_$_Gizmo", %swift.opaque* @_objc_empty_cache, %swift.opaque* null, i64 add (i64 ptrtoint ({ i32, i32, i32, i32, i8*, i8*, { i32, i32, [2 x { i8*, i8*, i8* }] }*, i8*, i8*, i8*, { i32, i32, [1 x { i8*, i8* }] }* }* @_DATA__TtC19objc_attr_NSManaged10SwiftGizmo to i64), i64 {{1|2}}), i32 0, i32 0, i32 8, i16 7, i16 0, i32 112, i32 16, {{.*}}* @"$S19objc_attr_NSManaged10SwiftGizmoCMn", i8* null, %T19objc_attr_NSManaged10SwiftGizmoC* (i64, %T19objc_attr_NSManaged10SwiftGizmoC*)* @"$S19objc_attr_NSManaged10SwiftGizmoC7bellsOnACSi_tcfc", i8* bitcast (void ()* @swift_deletedMethodError to i8*) }>
30+
// CHECK: @"$S19objc_attr_NSManaged10SwiftGizmoCMf" = internal global <{ {{.*}} }> <{ void (%T19objc_attr_NSManaged10SwiftGizmoC*)* @"$S19objc_attr_NSManaged10SwiftGizmoCfD", i8** @"$SBOWV", i64 ptrtoint (%objc_class* @"OBJC_METACLASS_$__TtC19objc_attr_NSManaged10SwiftGizmo" to i64), %objc_class* @"OBJC_CLASS_$_Gizmo", %swift.opaque* @_objc_empty_cache, %swift.opaque* null, i64 add (i64 ptrtoint ({ i32, i32, i32, i32, i8*, i8*, { i32, i32, [2 x { i8*, i8*, i8* }] }*, i8*, i8*, i8*, { i32, i32, [1 x { i8*, i8* }] }* }* @_DATA__TtC19objc_attr_NSManaged10SwiftGizmo to i64), i64 {{1|2}}), i32 {{1|0}}, i32 0, i32 8, i16 7, i16 0, i32 112, i32 16, {{.*}}* @"$S19objc_attr_NSManaged10SwiftGizmoCMn", i8* null, %T19objc_attr_NSManaged10SwiftGizmoC* (i64, %T19objc_attr_NSManaged10SwiftGizmoC*)* @"$S19objc_attr_NSManaged10SwiftGizmoC7bellsOnACSi_tcfc", i8* bitcast (void ()* @swift_deletedMethodError to i8*) }>
3131

3232
@objc class SwiftGizmo : Gizmo {
3333
@objc @NSManaged var x: X

test/IRGen/vtable.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ sil @$S6vtable1CCfD : $@convention(method) (@owned C) -> ()
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}}),
30-
// CHECK-objc: i32 2, i32 0, i32 16, i16 7, i16 0,
30+
// CHECK-objc: i32 {{3|2}}, i32 0, i32 16, i16 7, i16 0,
3131
// CHECK-objc: i32 112, i32 16,
3232
// CHECK-objc: @"$S6vtable1CCMn"
3333
// CHECK-objc: [[C]]* (%swift.type*)* @"$S6vtable1CCACycACmcfC",
@@ -42,7 +42,7 @@ sil @$S6vtable1CCfD : $@convention(method) (@owned C) -> ()
4242
// CHECK-native: %swift.opaque* null,
4343
// CHECK-native: %swift.opaque* null,
4444
// CHECK-native: i64 1,
45-
// CHECK-native: i32 2, i32 0, i32 16, i16 7, i16 0,
45+
// CHECK-native: i32 {{3|2}}, i32 0, i32 16, i16 7, i16 0,
4646
// CHECK-native: i32 112, i32 16,
4747
// CHECK-native: @"$S6vtable1CCMn"
4848
// CHECK-native: [[C]]* (%swift.type*)* @"$S6vtable1CCACycACmcfC",

0 commit comments

Comments
 (0)