Skip to content

Commit 6a993dd

Browse files
authored
Merge pull request #15476 from slavapestov/private-linkage
IRGen: Actually make use of private linkage
2 parents 0da0d10 + 98d74bd commit 6a993dd

File tree

10 files changed

+15
-33
lines changed

10 files changed

+15
-33
lines changed

include/swift/SIL/FormalLinkage.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ enum class FormalLinkage {
3737
/// unique file that is known to define it.
3838
HiddenUnique,
3939

40-
/// This entity is visible in only a single Swift module but does not
41-
/// have a unique file that is known to define it.
42-
HiddenNonUnique,
43-
4440
/// This entity is visible in only a single Swift file. These are by
4541
/// definition unique.
4642
Private,

include/swift/SIL/SILProfiler.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include "swift/AST/ASTNode.h"
2222
#include "swift/AST/Stmt.h"
2323
#include "swift/Basic/ProfileCounter.h"
24-
#include "swift/SIL/FormalLinkage.h"
2524
#include "swift/SIL/SILAllocated.h"
2625
#include "llvm/ADT/DenseMap.h"
2726

lib/IRGen/GenDecl.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ bool IRGenerator::tryEnableLazyTypeMetadata(NominalTypeDecl *Nominal) {
9494
// We can't remove metadata for externally visible types.
9595
return false;
9696
case FormalLinkage::HiddenUnique:
97-
case FormalLinkage::HiddenNonUnique:
9897
// In non-whole-module mode, also internal types are visible externally.
9998
if (!SIL.isWholeModule())
10099
return false;
@@ -1418,7 +1417,6 @@ static SILLinkage getNonUniqueSILLinkage(FormalLinkage linkage,
14181417
return (forDefinition ? SILLinkage::Shared : SILLinkage::PublicExternal);
14191418

14201419
case FormalLinkage::HiddenUnique:
1421-
case FormalLinkage::HiddenNonUnique:
14221420
return (forDefinition ? SILLinkage::Shared : SILLinkage::HiddenExternal);
14231421

14241422
case FormalLinkage::Private:
@@ -1541,7 +1539,6 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
15411539
// Resilient classes don't expose field offset symbols.
15421540
if (cast<ClassDecl>(varDecl->getDeclContext())->isResilient()) {
15431541
assert(linkage != FormalLinkage::PublicNonUnique &&
1544-
linkage != FormalLinkage::HiddenNonUnique &&
15451542
"Cannot have a resilient class with non-unique linkage");
15461543

15471544
if (linkage == FormalLinkage::PublicUnique)

lib/IRGen/MetadataRequest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "swift/AST/ASTContext.h"
3333
#include "swift/AST/ExistentialLayout.h"
3434
#include "swift/AST/IRGenOptions.h"
35+
#include "swift/SIL/FormalLinkage.h"
3536
#include "swift/SIL/TypeLowering.h"
3637

3738
using namespace swift;
@@ -635,7 +636,6 @@ MetadataAccessStrategy irgen::getTypeMetadataAccessStrategy(CanType type) {
635636
return MetadataAccessStrategy::PrivateAccessor;
636637

637638
case FormalLinkage::PublicNonUnique:
638-
case FormalLinkage::HiddenNonUnique:
639639
return MetadataAccessStrategy::NonUniqueAccessor;
640640
}
641641
llvm_unreachable("bad formal linkage");

lib/SIL/SIL.cpp

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ FormalLinkage swift::getDeclLinkage(const ValueDecl *D) {
4444
if (isa<ClangModuleUnit>(fileContext))
4545
return FormalLinkage::PublicNonUnique;
4646

47-
if (!D->hasAccess()) {
48-
assert(D->getDeclContext()->isLocalContext());
49-
return FormalLinkage::Private;
50-
}
51-
5247
switch (D->getEffectiveAccess()) {
5348
case AccessLevel::Public:
5449
case AccessLevel::Open:
@@ -57,9 +52,7 @@ FormalLinkage swift::getDeclLinkage(const ValueDecl *D) {
5752
return FormalLinkage::HiddenUnique;
5853
case AccessLevel::FilePrivate:
5954
case AccessLevel::Private:
60-
// Why "hidden" instead of "private"? Because the debugger may need to
61-
// access these symbols.
62-
return FormalLinkage::HiddenUnique;
55+
return FormalLinkage::Private;
6356
}
6457

6558
llvm_unreachable("Unhandled access level in switch.");
@@ -79,9 +72,6 @@ SILLinkage swift::getSILLinkage(FormalLinkage linkage,
7972
case FormalLinkage::HiddenUnique:
8073
return (forDefinition ? SILLinkage::Hidden : SILLinkage::HiddenExternal);
8174

82-
case FormalLinkage::HiddenNonUnique:
83-
return (forDefinition ? SILLinkage::Shared : SILLinkage::HiddenExternal);
84-
8575
case FormalLinkage::Private:
8676
return SILLinkage::Private;
8777
}

lib/SIL/SILProfiler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "swift/AST/ASTWalker.h"
1515
#include "swift/AST/Decl.h"
1616
#include "swift/Parse/Lexer.h"
17+
#include "swift/SIL/FormalLinkage.h"
1718
#include "swift/SIL/SILModule.h"
1819
#include "llvm/IR/GlobalValue.h"
1920
#include "llvm/IR/Intrinsics.h"
@@ -886,7 +887,6 @@ getEquivalentPGOLinkage(FormalLinkage Linkage) {
886887
return llvm::GlobalValue::ExternalLinkage;
887888

888889
case FormalLinkage::HiddenUnique:
889-
case FormalLinkage::HiddenNonUnique:
890890
case FormalLinkage::Private:
891891
return llvm::GlobalValue::PrivateLinkage;
892892
}

test/IRGen/access_control.sil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ internal struct InternalStruct { var x: Int }
1212
// CHECK: @"$S14access_control14InternalStructVMf" = internal constant
1313

1414
private struct PrivateStruct { var x: Int }
15-
// CHECK: @"$S14access_control13PrivateStruct33_8F630B0A1EEF3ED34B761E3ED76C95A8LLVMn" = hidden constant
15+
// CHECK: @"$S14access_control13PrivateStruct33_8F630B0A1EEF3ED34B761E3ED76C95A8LLVMn" = internal constant
1616
// CHECK: @"$S14access_control13PrivateStruct33_8F630B0A1EEF3ED34B761E3ED76C95A8LLVMf" = internal constant
1717

1818
func local() {
1919
struct LocalStruct { var x: Int }
20-
// CHECK: @"$S14access_control5localyyF11LocalStructL_VMn" = hidden constant
20+
// CHECK: @"$S14access_control5localyyF11LocalStructL_VMn" = internal constant
2121
// CHECK: @"$S14access_control5localyyF11LocalStructL_VMf" = internal constant
2222
}
2323

2424
// CHECK: @"$S14access_control12PublicStructVN" = {{(protected )?}}alias
2525
// CHECK: @"$S14access_control14InternalStructVN" = hidden alias
26-
// CHECK: @"$S14access_control13PrivateStruct33_8F630B0A1EEF3ED34B761E3ED76C95A8LLVN" = hidden alias
27-
// CHECK: @"$S14access_control5localyyF11LocalStructL_VN" = hidden alias
26+
// CHECK: @"$S14access_control13PrivateStruct33_8F630B0A1EEF3ED34B761E3ED76C95A8LLVN" = internal alias
27+
// CHECK: @"$S14access_control5localyyF11LocalStructL_VN" = internal alias

test/IRGen/decls.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ func test1() {
2020
}
2121

2222
// Check that we emit nominal type descriptors for all types.
23-
// CHECK-DAG: @"$S5decls5test1yyF1aL_CMn" = hidden constant
24-
// CHECK-DAG: @"$S5decls5test1yyF1bL_CMn" = hidden constant
23+
// CHECK-DAG: @"$S5decls5test1yyF1aL_CMn" = internal constant
24+
// CHECK-DAG: @"$S5decls5test1yyF1bL_CMn" = internal constant
2525

test/IRGen/local_types.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public func topLevelIfConfig() {
5050
}
5151
#else
5252
public func topLevelIfConfig() {
53-
// CHECK-DAG: @"$S11local_types16topLevelIfConfigyyF17LocalClassEnabledL_CMm" = hidden global %objc_class
53+
// CHECK-DAG: @"$S11local_types16topLevelIfConfigyyF17LocalClassEnabledL_CMm" = internal global %objc_class
5454
class LocalClassEnabled {}
5555
}
5656
#endif
@@ -62,7 +62,7 @@ public struct NominalIfConfig {
6262
}
6363
#else
6464
public func method() {
65-
// CHECK-DAG: @"$S11local_types15NominalIfConfigV6methodyyF17LocalClassEnabledL_CMm" = hidden global %objc_class
65+
// CHECK-DAG: @"$S11local_types15NominalIfConfigV6methodyyF17LocalClassEnabledL_CMm" = internal global %objc_class
6666
class LocalClassEnabled {}
6767
}
6868
#endif
@@ -75,10 +75,10 @@ public func innerIfConfig() {
7575
class LocalClassDisabled {}
7676
}
7777
#else
78-
// CHECK-DAG: @"$S11local_types13innerIfConfigyyF17LocalClassEnabledL_CMm" = hidden global %objc_class
78+
// CHECK-DAG: @"$S11local_types13innerIfConfigyyF17LocalClassEnabledL_CMm" = internal global %objc_class
7979
class LocalClassEnabled {}
8080
func inner() {
81-
// CHECK-DAG: @"$S11local_types13innerIfConfigyyF0C0L0_yyF17LocalClassEnabledL_CMm" = hidden global %objc_class
81+
// CHECK-DAG: @"$S11local_types13innerIfConfigyyF0C0L0_yyF17LocalClassEnabledL_CMm" = internal global %objc_class
8282
class LocalClassEnabled {}
8383
}
8484
#endif

test/IRGen/nested_private_type_context_descriptor.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: %target-swift-frontend -emit-ir -O -wmo %s | %FileCheck %s
22

3-
// CHECK-DAG: @"$S38nested_private_type_context_descriptor1X33{{.................................}}LLVMn" = hidden constant
4-
// CHECK-DAG: @"$S38nested_private_type_context_descriptor1X33{{.................................}}LLV1YVMn" = hidden constant
3+
// CHECK-DAG: @"$S38nested_private_type_context_descriptor1X33{{.................................}}LLVMn" = internal constant
4+
// CHECK-DAG: @"$S38nested_private_type_context_descriptor1X33{{.................................}}LLV1YVMn" = internal constant
55

66
fileprivate struct X {
77
fileprivate struct Y {}

0 commit comments

Comments
 (0)