Skip to content

Commit b49f2ef

Browse files
authored
Merge pull request #64384 from apple/revert-64353-weak-link-unavailable-symbols
Revert "IRGen: Weakly link symbols for unavailable declarations"
2 parents b7c76e6 + 79c6d4b commit b49f2ef

File tree

4 files changed

+8
-109
lines changed

4 files changed

+8
-109
lines changed

lib/AST/Decl.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,14 +1126,6 @@ bool Decl::isAlwaysWeakImported() const {
11261126
if (getAttrs().hasAttribute<WeakLinkedAttr>())
11271127
return true;
11281128

1129-
// Declarations that are unavailable should be weak linked since they are
1130-
// meant to be unreachable at runtime and their removal should not affect
1131-
// clients. However, make an exception for unavailable declarations with
1132-
// explicit introduction versions, which are considered required ABI.
1133-
if (getSemanticUnavailableAttr() &&
1134-
getAvailabilityForLinkage().isAlwaysAvailable())
1135-
return true;
1136-
11371129
if (auto *accessor = dyn_cast<AccessorDecl>(this))
11381130
return accessor->getStorage()->isAlwaysWeakImported();
11391131

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,27 @@
11
@available(macOS 10.50, *)
22
public func conditionallyAvailableFunction() {}
33

4-
@available(macOS, unavailable)
5-
public func unavailableFunction() {}
6-
7-
@available(macOS 10.50, *)
8-
@available(macOS, unavailable)
9-
public func unavailableButIntroducedFunction() {}
10-
114
@available(macOS 10.50, *)
125
public var conditionallyAvailableGlobal: Int {
136
get {return 0}
147
set {}
158
}
169

17-
@available(macOS, unavailable)
18-
public var unavailableGlobal: Int {
19-
get {return 0}
20-
set {}
21-
}
22-
2310
@available(macOS 10.50, *)
2411
public struct ConditionallyAvailableStruct {
2512
public func conditionallyAvailableMethod() {}
2613
}
2714

28-
extension ConditionallyAvailableStruct {
29-
public struct NestedStruct {}
30-
}
31-
32-
@available(macOS, unavailable)
33-
public struct UnvailableStruct {
34-
public func unavailableMethod() {}
35-
}
36-
3715
public protocol AlwaysAvailableProtocol {}
3816

3917
public struct AlwaysAvailableStruct {}
4018

4119
@available(macOS 10.50, *)
4220
extension AlwaysAvailableStruct : AlwaysAvailableProtocol {}
4321

44-
@available(macOS, unavailable)
45-
public protocol UnavailableProtocol {}
46-
47-
@available(macOS, unavailable)
48-
extension AlwaysAvailableStruct : UnavailableProtocol {}
49-
5022
public enum AlwaysAvailableEnum {
5123
case alwaysAvailableCase
5224

5325
@available(macOS 10.50, *)
5426
case conditionallyAvailableCase
55-
}
27+
}
Lines changed: 6 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.50 -emit-module -emit-module-path %t/weak_import_availability_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_availability_helper.swift -enable-library-evolution
2+
// RUN: %target-swift-frontend -emit-module -emit-module-path %t/weak_import_availability_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_availability_helper.swift -enable-library-evolution
33
//
4-
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD
5-
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW
6-
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW
4+
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefix=CHECK-OLD
5+
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefix=CHECK-NEW
6+
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefix=CHECK-NEW
77

8-
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD
9-
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW
8+
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefix=CHECK-OLD
9+
// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefix=CHECK-NEW
1010

1111
// REQUIRES: OS=macosx
1212

@@ -35,16 +35,6 @@ public func useConditionallyAvailableConformance() {
3535
// CHECK-OLD-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = extern_weak global i8*
3636
// CHECK-NEW-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = external global i8*
3737

38-
@available(macOS, unavailable)
39-
func useUnavailableConformance<T : UnavailableProtocol>(_: T.Type) {}
40-
41-
@available(macOS, unavailable)
42-
public func useUnavailableConformance() {
43-
useUnavailableConformance(AlwaysAvailableStruct.self)
44-
}
45-
46-
// CHECK-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA19UnavailableProtocolAAWP" = extern_weak global i8*, align 8
47-
4838
@available(macOS 10.50, *)
4939
public func callConditionallyAvailableFunction() {
5040
conditionallyAvailableFunction()
@@ -53,21 +43,6 @@ public func callConditionallyAvailableFunction() {
5343
// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper30conditionallyAvailableFunctionyyF"()
5444
// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper30conditionallyAvailableFunctionyyF"()
5545

56-
@available(macOS, unavailable)
57-
public func callUnavailableFunction() {
58-
unavailableFunction()
59-
}
60-
61-
// CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper19unavailableFunctionyyF"()
62-
63-
@available(macOS, unavailable)
64-
public func callUnavailableButIntroducedFunction() {
65-
unavailableButIntroducedFunction()
66-
}
67-
68-
// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper32unavailableButIntroducedFunctionyyF"()
69-
// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper32unavailableButIntroducedFunctionyyF"()
70-
7146
@available(macOS 10.50, *)
7247
public func useConditionallyAvailableGlobal() {
7348
_ = conditionallyAvailableGlobal
@@ -81,56 +56,17 @@ public func useConditionallyAvailableGlobal() {
8156
// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64)
8257
// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64)
8358

84-
// CHECK-OLD-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32))
85-
// CHECK-NEW-LABEL: declare swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32))
86-
87-
@available(macOS, unavailable)
88-
public func useUnavailableGlobal() {
89-
_ = unavailableGlobal
90-
unavailableGlobal = 0
91-
unavailableGlobal += 1
92-
}
93-
94-
// CHECK-LABEL: declare extern_weak swiftcc i64 @"$s31weak_import_availability_helper17unavailableGlobalSivg"()
95-
// CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper17unavailableGlobalSivs"(i64)
96-
// CHECK-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper17unavailableGlobalSivM"(i8* noalias dereferenceable(32))
97-
9859
func blackHole<T>(_: T) {}
9960

10061
@available(macOS 10.50, *)
10162
public func useConditionallyAvailableStruct() {
10263
blackHole(ConditionallyAvailableStruct.self)
10364
}
10465

105-
// CHECK-OLD-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructVMa"(i64)
106-
// CHECK-NEW-LABEL: declare swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructVMa"(i64)
107-
108-
@available(macOS 10.50, *)
109-
public func useNestedConditionallyAvailableStruct() {
110-
blackHole(ConditionallyAvailableStruct.NestedStruct.self)
111-
}
112-
113-
// CHECK-OLD-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructV06NestedG0VMa"(i64)
114-
// CHECK-NEW-LABEL: declare swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructV06NestedG0VMa"(i64)
115-
11666
@available(macOS 10.50, *)
11767
public func useConditionallyAvailableMethod(s: ConditionallyAvailableStruct) {
11868
s.conditionallyAvailableMethod()
11969
}
12070

12171
// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself)
12272
// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself)
123-
124-
@available(macOS, unavailable)
125-
public func useUnavailableStruct() {
126-
blackHole(UnvailableStruct.self)
127-
}
128-
129-
// CHECK-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper16UnvailableStructVMa"(i64)
130-
131-
@available(macOS, unavailable)
132-
public func useUnavailableMethod(s: UnvailableStruct) {
133-
s.unavailableMethod()
134-
}
135-
136-
// CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper16UnvailableStructV17unavailableMethodyyF"(%swift.opaque* noalias nocapture swiftself)

test/SILGen/objc_init_unavailable.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
// RUN: %target-swift-emit-silgen(mock-sdk: %clang-importer-sdk) -enable-objc-interop -import-objc-header %S/Inputs/objc_init_unavailable.h %s | %FileCheck %s
22
// REQUIRES: objc_interop
3-
// REQUIRES: OS=macosx
43

54
@available(macOS, unavailable)
65
public func callUnavailableInit(name: String) -> ClassWithUnavailableInit {
76
return ClassWithUnavailableInit(bundleID: name)
87
}
98

10-
// CHECK-LABEL: sil [weak_imported] [ossa] @$s21objc_init_unavailable19callUnavailableInit4nameSo09ClassWitheF0CSS_tF : $@convention(thin) (@guaranteed String) -> @owned ClassWithUnavailableInit {
9+
// CHECK-LABEL: sil [ossa] @$s21objc_init_unavailable19callUnavailableInit4nameSo09ClassWitheF0CSS_tF : $@convention(thin) (@guaranteed String) -> @owned ClassWithUnavailableInit {
1110
// CHECK: function_ref @$sSo24ClassWithUnavailableInitC8bundleIDABSgSSSg_tcfC : $@convention(method) (@owned Optional<String>, @thick ClassWithUnavailableInit.Type) -> @owned Optional<ClassWithUnavailableInit>
1211
// CHECK: return
1312

0 commit comments

Comments
 (0)