Skip to content

Commit b9add53

Browse files
committed
Fixed subclass scope checks.
Updated doc comments for Package SIL linkage. Added more tests.
1 parent 64d2cfb commit b9add53

File tree

2 files changed

+42
-37
lines changed

2 files changed

+42
-37
lines changed

include/swift/SIL/SILLinkage.h

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,14 @@ enum class SILLinkage : uint8_t {
5858
/// PublicNonABI functions must be definitions.
5959
PublicNonABI,
6060

61-
/// Visible to multiple Swift modules within a package.
61+
/// Same as \c Public, except the definition is visible within a package
62+
/// of modules.
6263
Package,
6364

64-
/// Used for default argument expressions and `@_alwaysEmitIntoClient`.
65+
/// Similar to \c PublicNonABI, this definition is used for symbols treated
66+
/// as package but do not have package entry points in the generated binary.
67+
/// It's used for default argument expressions and `@_alwaysEmitIntoClient`.
68+
/// When deserialized, this will become \c Shared linkage.
6569
PackageNonABI,
6670

6771
/// This object definition is visible only to the current Swift
@@ -97,7 +101,9 @@ enum class SILLinkage : uint8_t {
97101
/// definition.
98102
PublicExternal,
99103

100-
/// Used to reference a package symbol in a different package.
104+
/// Similar to \c PublicExternal.
105+
/// Used to reference a \c Package definition in a different module
106+
/// within a package.
101107
PackageExternal,
102108

103109
/// A Public or Hidden definition with the same name as this object
@@ -244,36 +250,20 @@ inline bool isAvailableExternally(SILLinkage linkage) {
244250
/// definition might be required outside the current SILModule.
245251
/// If \p is true then we are in whole-module compilation.
246252
inline bool isPossiblyUsedExternally(SILLinkage linkage, bool wholeModule) {
247-
if (wholeModule) {
248-
switch (linkage) {
249-
case SILLinkage::Public:
250-
case SILLinkage::PublicNonABI:
251-
case SILLinkage::Package:
252-
case SILLinkage::PackageNonABI:
253-
return true;
254-
case SILLinkage::Hidden:
255-
case SILLinkage::Shared:
256-
case SILLinkage::Private:
257-
case SILLinkage::PublicExternal:
258-
case SILLinkage::PackageExternal:
259-
case SILLinkage::HiddenExternal:
260-
return false;
261-
}
262-
} else {
263-
switch (linkage) {
264-
case SILLinkage::Public:
265-
case SILLinkage::PublicNonABI:
266-
case SILLinkage::Package:
267-
case SILLinkage::PackageNonABI:
268-
case SILLinkage::Hidden:
269-
return true;
270-
case SILLinkage::Shared:
271-
case SILLinkage::Private:
272-
case SILLinkage::PublicExternal:
273-
case SILLinkage::PackageExternal:
274-
case SILLinkage::HiddenExternal:
275-
return false;
276-
}
253+
switch (linkage) {
254+
case SILLinkage::Public:
255+
case SILLinkage::PublicNonABI:
256+
case SILLinkage::Package:
257+
case SILLinkage::PackageNonABI:
258+
return true;
259+
case SILLinkage::Hidden:
260+
return wholeModule;
261+
case SILLinkage::Shared:
262+
case SILLinkage::Private:
263+
case SILLinkage::PublicExternal:
264+
case SILLinkage::PackageExternal:
265+
case SILLinkage::HiddenExternal:
266+
return false;
277267
}
278268
llvm_unreachable("Unhandled SILLinkage in switch.");
279269
}
@@ -342,18 +332,18 @@ inline SILLinkage effectiveLinkageForClassMember(SILLinkage linkage,
342332
switch (scope) {
343333
case SubclassScope::External:
344334
switch (linkage) {
345-
case SILLinkage::Package:
346335
case SILLinkage::Hidden:
347-
case SILLinkage::Shared:
348336
case SILLinkage::Private:
349337
return SILLinkage::Public;
350-
case SILLinkage::PackageExternal:
351338
case SILLinkage::HiddenExternal:
352339
return SILLinkage::PublicExternal;
353340
case SILLinkage::Public:
354341
case SILLinkage::PublicNonABI:
355-
case SILLinkage::PublicExternal:
342+
case SILLinkage::Package:
356343
case SILLinkage::PackageNonABI:
344+
case SILLinkage::PublicExternal:
345+
case SILLinkage::PackageExternal:
346+
case SILLinkage::Shared:
357347
break;
358348
}
359349
break;

test/IRGen/objc_class_allocator.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -emit-ir %s -validate-tbd-against-ir=all | %FileCheck %s
2+
3+
// REQUIRES: objc_interop
4+
5+
import Foundation
6+
7+
public class Foo {
8+
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo8NSNumberC5valueABSi_tcfC"
9+
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo8NSNumberC5valueABSi_tcfcTO"
10+
public var bar: NSNumber = NSNumber(value: 1)
11+
}
12+
13+
14+
15+

0 commit comments

Comments
 (0)