Skip to content

Commit 30a74f6

Browse files
committed
SIL: remove the private_external SILLinkage
This was a relict from the -sil-serialize-all days. This linkage doesn't make any sense because a private function cannot be referenced from another module (or file, in case of non-wmo compilation).
1 parent b4966a4 commit 30a74f6

20 files changed

+32
-47
lines changed

include/swift/SIL/SILLinkage.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ enum class SILLinkage : uint8_t {
8585
/// shared.
8686
SharedExternal,
8787

88-
/// The same as SharedExternal, except that the definition is private in the
89-
/// other module. This can only occur if an inlined fragile function from
90-
/// another module references a private definition in the other module.
91-
PrivateExternal,
92-
9388
/// The default linkage for a definition.
9489
DefaultForDefinition = Public,
9590

@@ -138,8 +133,6 @@ inline SILLinkage stripExternalFromLinkage(SILLinkage linkage) {
138133
return SILLinkage::Hidden;
139134
if (linkage == SILLinkage::SharedExternal)
140135
return SILLinkage::Shared;
141-
if (linkage == SILLinkage::PrivateExternal)
142-
return SILLinkage::Private;
143136
return linkage;
144137
}
145138

@@ -158,10 +151,8 @@ inline SILLinkage addExternalToLinkage(SILLinkage linkage) {
158151
case SILLinkage::Hidden:
159152
return SILLinkage::HiddenExternal;
160153
case SILLinkage::Private:
161-
return SILLinkage::PrivateExternal;
162154
case SILLinkage::PublicExternal:
163155
case SILLinkage::SharedExternal:
164-
case SILLinkage::PrivateExternal:
165156
case SILLinkage::HiddenExternal:
166157
return linkage;
167158
}
@@ -197,7 +188,6 @@ inline bool hasPublicVisibility(SILLinkage linkage) {
197188
case SILLinkage::Shared:
198189
case SILLinkage::SharedExternal:
199190
case SILLinkage::Private:
200-
case SILLinkage::PrivateExternal:
201191
case SILLinkage::HiddenExternal:
202192
return false;
203193
}
@@ -216,7 +206,6 @@ inline bool hasSharedVisibility(SILLinkage linkage) {
216206
case SILLinkage::Hidden:
217207
case SILLinkage::HiddenExternal:
218208
case SILLinkage::Private:
219-
case SILLinkage::PrivateExternal:
220209
return false;
221210
}
222211

@@ -226,7 +215,6 @@ inline bool hasSharedVisibility(SILLinkage linkage) {
226215
inline bool hasPrivateVisibility(SILLinkage linkage) {
227216
switch (linkage) {
228217
case SILLinkage::Private:
229-
case SILLinkage::PrivateExternal:
230218
return true;
231219
case SILLinkage::Public:
232220
case SILLinkage::PublicExternal:
@@ -247,8 +235,7 @@ inline SILLinkage effectiveLinkageForClassMember(SILLinkage linkage,
247235
case SubclassScope::External:
248236
if (linkage == SILLinkage::Private || linkage == SILLinkage::Hidden)
249237
return SILLinkage::Public;
250-
if (linkage == SILLinkage::PrivateExternal ||
251-
linkage == SILLinkage::HiddenExternal)
238+
if (linkage == SILLinkage::HiddenExternal)
252239
return SILLinkage::PublicExternal;
253240
break;
254241

lib/IRGen/GenDecl.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2074,7 +2074,6 @@ getIRLinkage(const UniversalLinkageInfo &info, SILLinkage linkage,
20742074
}
20752075

20762076
case SILLinkage::HiddenExternal:
2077-
case SILLinkage::PrivateExternal:
20782077
if (isDefinition)
20792078
return RESULT(AvailableExternally, Hidden, Default);
20802079

lib/IRGen/GenMeta.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2023,7 +2023,6 @@ namespace {
20232023
case SILLinkage::Hidden:
20242024
case SILLinkage::HiddenExternal:
20252025
case SILLinkage::Private:
2026-
case SILLinkage::PrivateExternal:
20272026
return true;
20282027

20292028
case SILLinkage::Shared:

lib/IRGen/Linking.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,8 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
609609
auto *nominal = getType().getAnyNominal();
610610
if (getDeclLinkage(nominal) == FormalLinkage::PublicNonUnique)
611611
return SILLinkage::Shared;
612-
return forDefinition ? SILLinkage::Private : SILLinkage::PrivateExternal;
612+
assert(forDefinition);
613+
return SILLinkage::Private;
613614
}
614615

615616
case Kind::TypeMetadataAccessFunction:

lib/SIL/IR/SIL.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ swift::getLinkageForProtocolConformance(const RootProtocolConformance *C,
8686
switch (access) {
8787
case AccessLevel::Private:
8888
case AccessLevel::FilePrivate:
89-
return (definition ? SILLinkage::Private : SILLinkage::PrivateExternal);
89+
return SILLinkage::Private;
9090

9191
case AccessLevel::Internal:
9292
return (definition ? SILLinkage::Hidden : SILLinkage::HiddenExternal);
@@ -280,7 +280,6 @@ bool AbstractStorageDecl::exportsPropertyDescriptor() const {
280280
return false;
281281

282282
case SILLinkage::HiddenExternal:
283-
case SILLinkage::PrivateExternal:
284283
case SILLinkage::PublicExternal:
285284
case SILLinkage::SharedExternal:
286285
llvm_unreachable("should be definition linkage?");

lib/SIL/IR/SILDeclRef.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ SILLinkage SILDeclRef::getLinkage(ForDefinition_t forDefinition) const {
412412
switch (effectiveAccess) {
413413
case AccessLevel::Private:
414414
case AccessLevel::FilePrivate:
415-
return maybeAddExternal(SILLinkage::Private);
415+
return SILLinkage::Private;
416416

417417
case AccessLevel::Internal:
418418
if (limit == Limit::OnDemand)

lib/SIL/IR/SILModule.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,10 @@ class SILModule::SerializationCallback final
7979
decl->setLinkage(SILLinkage::SharedExternal);
8080
return;
8181
case SILLinkage::Private:
82-
decl->setLinkage(SILLinkage::PrivateExternal);
83-
return;
82+
llvm_unreachable("cannot make a private external symbol");
8483
case SILLinkage::PublicExternal:
8584
case SILLinkage::HiddenExternal:
8685
case SILLinkage::SharedExternal:
87-
case SILLinkage::PrivateExternal:
8886
return;
8987
}
9088
}

lib/SIL/IR/SILPrinter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2746,7 +2746,6 @@ static StringRef getLinkageString(SILLinkage linkage) {
27462746
case SILLinkage::PublicExternal: return "public_external ";
27472747
case SILLinkage::HiddenExternal: return "hidden_external ";
27482748
case SILLinkage::SharedExternal: return "shared_external ";
2749-
case SILLinkage::PrivateExternal: return "private_external ";
27502749
}
27512750
llvm_unreachable("bad linkage");
27522751
}

lib/SIL/Parser/ParseSIL.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,6 @@ static bool parseSILLinkage(Optional<SILLinkage> &Result, Parser &P) {
779779
.Case("public_external", SILLinkage::PublicExternal)
780780
.Case("hidden_external", SILLinkage::HiddenExternal)
781781
.Case("shared_external", SILLinkage::SharedExternal)
782-
.Case("private_external", SILLinkage::PrivateExternal)
783782
.Default(None);
784783

785784
// If we succeed, consume the token.

lib/SILGen/SILGen.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,26 @@ SILGenModule::SILGenModule(SILModule &M, ModuleDecl *SM)
6565

6666
SILGenModule::~SILGenModule() {
6767
assert(!TopLevelSGF && "active source file lowering!?");
68+
69+
// Update the linkage of external private functions to public_external,
70+
// because there is no private_external linkage. External private functions
71+
// can occur in the following cases:
72+
//
73+
// * private class methods which are referenced from the vtable of a derived
74+
// class in a different file/module. Such private methods are always
75+
// generated with public linkage in the other file/module.
76+
//
77+
// * in lldb: lldb can access private declarations in other files/modules
78+
//
79+
// * private functions with a @_silgen_name attribute but without a body
80+
//
81+
// * when compiling with -disable-access-control
82+
//
83+
for (SILFunction &f : M.getFunctionList()) {
84+
if (f.getLinkage() == SILLinkage::Private && f.isExternalDeclaration())
85+
f.setLinkage(SILLinkage::PublicExternal);
86+
}
87+
6888
M.verify();
6989
}
7090

lib/SILOptimizer/IPO/CrossModuleSerializationSetup.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,6 @@ bool CrossModuleSerializationSetup::canUseFromInline(SILFunction *func,
404404
case SILLinkage::Private:
405405
case SILLinkage::PublicExternal:
406406
case SILLinkage::SharedExternal:
407-
case SILLinkage::PrivateExternal:
408407
case SILLinkage::HiddenExternal:
409408
break;
410409
}

lib/SILOptimizer/UtilityPasses/InstCount.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ STATISTIC(TotalPrivateFuncs, "Number of private funcs");
5050
STATISTIC(TotalSharedFuncs, "Number of shared funcs");
5151
STATISTIC(TotalPublicExternalFuncs, "Number of public external funcs");
5252
STATISTIC(TotalHiddenExternalFuncs, "Number of hidden external funcs");
53-
STATISTIC(TotalPrivateExternalFuncs, "Number of private external funcs");
5453
STATISTIC(TotalSharedExternalFuncs, "Number of shared external funcs");
5554

5655
// Individual instruction statistics
@@ -139,9 +138,6 @@ class InstCount : public SILFunctionTransform {
139138
case SILLinkage::SharedExternal:
140139
++TotalSharedExternalFuncs;
141140
break;
142-
case SILLinkage::PrivateExternal:
143-
++TotalPrivateExternalFuncs;
144-
break;
145141
}
146142
}
147143
};

lib/Serialization/DeserializeSIL.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ fromStableSILLinkage(unsigned value) {
7070
case SIL_LINKAGE_PUBLIC_EXTERNAL: return SILLinkage::PublicExternal;
7171
case SIL_LINKAGE_HIDDEN_EXTERNAL: return SILLinkage::HiddenExternal;
7272
case SIL_LINKAGE_SHARED_EXTERNAL: return SILLinkage::SharedExternal;
73-
case SIL_LINKAGE_PRIVATE_EXTERNAL: return SILLinkage::PrivateExternal;
7473
default: return None;
7574
}
7675
}

lib/Serialization/ModuleFormat.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const uint16_t SWIFTMODULE_VERSION_MAJOR = 0;
5656
/// describe what change you made. The content of this comment isn't important;
5757
/// it just ensures a conflict if two people change the module format.
5858
/// Don't worry about adhering to the 80-column limit for this line.
59-
const uint16_t SWIFTMODULE_VERSION_MINOR = 633; // remove value_buffer insts
59+
const uint16_t SWIFTMODULE_VERSION_MINOR = 634; // remove PrivateExternal
6060

6161
/// A standard hash seed used for all string hashes in a serialized module.
6262
///

lib/Serialization/SILFormat.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ enum SILLinkageEncoding : uint8_t {
4545
SIL_LINKAGE_PUBLIC_EXTERNAL,
4646
SIL_LINKAGE_HIDDEN_EXTERNAL,
4747
SIL_LINKAGE_SHARED_EXTERNAL,
48-
SIL_LINKAGE_PRIVATE_EXTERNAL,
4948
};
5049
using SILLinkageField = BCFixed<4>;
5150

lib/Serialization/SerializeSIL.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ static unsigned toStableSILLinkage(SILLinkage linkage) {
6666
case SILLinkage::PublicExternal: return SIL_LINKAGE_PUBLIC_EXTERNAL;
6767
case SILLinkage::HiddenExternal: return SIL_LINKAGE_HIDDEN_EXTERNAL;
6868
case SILLinkage::SharedExternal: return SIL_LINKAGE_SHARED_EXTERNAL;
69-
case SILLinkage::PrivateExternal: return SIL_LINKAGE_PRIVATE_EXTERNAL;
7069
}
7170
llvm_unreachable("bad linkage");
7271
}

test/IRGen/sil_linkage.sil

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ sil_stage canonical
1515
// CHECK: declare{{( dllimport)?}} swiftcc void @public_external_fragile_function_def_test()
1616
// CHECK: define{{( protected)?}} available_externally{{ (hidden)?}}{{( dllimport)?}} swiftcc void @hidden_external_fragile_function_def_test() {{.*}} {
1717
// CHECK: define linkonce_odr hidden swiftcc void @shared_external_fragile_function_def_test() {{.*}} {
18-
// CHECK: define{{( protected)?}} available_externally{{ (hidden)?}}{{( dllimport)?}} swiftcc void @private_external_fragile_function_def_test() {{.*}} {
1918
// CHECK: define{{( protected)?}}{{( dllexport)?}} swiftcc void @public_resilient_function_test() {{.*}} {
2019
// CHECK: define hidden swiftcc void @hidden_resilient_function_test() {{.*}} {
2120
// CHECK: define linkonce_odr hidden swiftcc void @shared_resilient_function_test() {{.*}} {
@@ -75,11 +74,6 @@ sil shared_external [serialized] @shared_external_fragile_function_def_test : $@
7574
return %0 : $()
7675
}
7776

78-
sil private_external [serialized] @private_external_fragile_function_def_test : $@convention(thin) () -> () {
79-
%0 = tuple()
80-
return %0 : $()
81-
}
82-
8377
sil public_external [serialized] @public_external_fragile_function_decl_test : $@convention(thin) () -> ()
8478

8579
sil hidden_external [serialized] @hidden_external_fragile_function_decl_test : $@convention(thin) () -> ()
@@ -153,7 +147,6 @@ sil public @use_all_symbols : $@convention(thin) () -> () {
153147
%4 = function_ref @public_external_fragile_function_def_test : $@convention(thin) () -> ()
154148
%5 = function_ref @hidden_external_fragile_function_def_test : $@convention(thin) () -> ()
155149
%6 = function_ref @shared_external_fragile_function_def_test : $@convention(thin) () -> ()
156-
%7 = function_ref @private_external_fragile_function_def_test : $@convention(thin) () -> ()
157150
%8 = function_ref @public_external_fragile_function_decl_test : $@convention(thin) () -> ()
158151
%9 = function_ref @hidden_external_fragile_function_decl_test : $@convention(thin) () -> ()
159152
// %10 = function_ref @shared_external_fragile_function_decl_test : $@convention(thin) () -> ()
@@ -178,7 +171,6 @@ sil public @use_all_symbols : $@convention(thin) () -> () {
178171
apply %4() : $@convention(thin) () -> ()
179172
apply %5() : $@convention(thin) () -> ()
180173
apply %6() : $@convention(thin) () -> ()
181-
apply %7() : $@convention(thin) () -> ()
182174
apply %8() : $@convention(thin) () -> ()
183175
apply %9() : $@convention(thin) () -> ()
184176
// apply %10() : $@convention(thin) () -> ()

test/SILOptimizer/devirt_try_apply.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public func test6() -> Int32?
7070
sil_global [serialized] @_TZvOs7Process5_argcVs5Int32 : $Int32
7171

7272

73-
sil_global private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
73+
sil_global [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
7474

7575

7676
sil_global [serialized] @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>
@@ -780,7 +780,7 @@ bb4(%19 : $Error):
780780
}
781781

782782

783-
sil private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> ()
783+
sil [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> ()
784784

785785

786786
public class A {

test/SILOptimizer/devirt_try_apply_ownership.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public func test6() -> Int32?
6969
sil_global [serialized] @_TZvOs7Process5_argcVs5Int32 : $Int32
7070

7171

72-
sil_global private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
72+
sil_global [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
7373

7474

7575
sil_global [serialized] @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>
@@ -736,7 +736,7 @@ bb4(%19 : @owned $Error):
736736
}
737737

738738

739-
sil private_external [serialized] [ossa] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> ()
739+
sil [serialized] [ossa] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> ()
740740

741741

742742
public class A {

test/SILOptimizer/optimize_never.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public func boo4(c: C) -> Int32
7575
sil_global [serialized] @$ss7ProcessO5_argcs5Int32VvZ : $Int32
7676

7777

78-
sil_global private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
78+
sil_global [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
7979

8080

8181
sil_global [serialized] @$ss7ProcessO11_unsafeArgvSpySpys4Int8VGGvZ : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>

0 commit comments

Comments
 (0)