@@ -1205,33 +1205,11 @@ bool LinkEntity::isAvailableExternally(IRGenModule &IGM) const {
1205
1205
llvm_unreachable (" bad link entity kind" );
1206
1206
}
1207
1207
1208
- bool LinkEntity::isFragile (IRGenModule &IGM) const {
1209
- switch (getKind ()) {
1210
- case Kind::SILFunction:
1211
- return getSILFunction ()->isFragile ();
1212
-
1213
- case Kind::SILGlobalVariable:
1214
- return getSILGlobalVariable ()->isFragile ();
1215
-
1216
- case Kind::DirectProtocolWitnessTable: {
1217
- if (auto wt = IGM.SILMod ->lookUpWitnessTable (getProtocolConformance ())) {
1218
- return wt->isFragile ();
1219
- } else {
1220
- return false ;
1221
- }
1222
- }
1223
-
1224
- default :
1225
- break ;
1226
- }
1227
- return false ;
1228
- }
1229
-
1230
1208
1231
1209
static std::pair<llvm::GlobalValue::LinkageTypes,
1232
1210
llvm::GlobalValue::VisibilityTypes>
1233
1211
getIRLinkage (IRGenModule &IGM,
1234
- SILLinkage linkage, bool isFragile, ForDefinition_t isDefinition,
1212
+ SILLinkage linkage, ForDefinition_t isDefinition,
1235
1213
bool isWeakImported) {
1236
1214
1237
1215
#define RESULT (LINKAGE, VISIBILITY ) \
@@ -1253,39 +1231,25 @@ llvm::GlobalValue::VISIBILITY##Visibility }
1253
1231
break ;
1254
1232
}
1255
1233
1256
- if (isFragile) {
1257
- // Fragile functions/globals must be visible from outside, regardless of
1258
- // their accessibility. If a caller is also fragile and inlined into another
1259
- // module it must be able to access this (not-inlined) function/global.
1260
- switch (linkage) {
1261
- case SILLinkage::Hidden:
1262
- case SILLinkage::Private:
1263
- linkage = SILLinkage::Public;
1264
- break ;
1265
-
1266
- case SILLinkage::Public:
1267
- case SILLinkage::Shared:
1268
- case SILLinkage::HiddenExternal:
1269
- case SILLinkage::PrivateExternal:
1270
- case SILLinkage::PublicExternal:
1271
- case SILLinkage::SharedExternal:
1272
- break ;
1273
- }
1274
- }
1275
-
1276
1234
switch (linkage) {
1277
1235
case SILLinkage::Public:
1278
1236
return {llvm::GlobalValue::ExternalLinkage, PublicDefinitionVisibility};
1237
+
1279
1238
case SILLinkage::Shared:
1280
- case SILLinkage::SharedExternal: return RESULT (LinkOnceODR, Hidden);
1281
- case SILLinkage::Hidden: return RESULT (External, Hidden);
1239
+ case SILLinkage::SharedExternal:
1240
+ return RESULT (LinkOnceODR, Hidden);
1241
+
1242
+ case SILLinkage::Hidden:
1243
+ return RESULT (External, Hidden);
1244
+
1282
1245
case SILLinkage::Private:
1283
1246
if (IGM.dispatcher .hasMultipleIGMs ()) {
1284
1247
// In case of multiple llvm modules (in multi-threaded compilation) all
1285
1248
// private decls must be visible from other files.
1286
1249
return RESULT (External, Hidden);
1287
1250
}
1288
1251
return RESULT (Internal, Default);
1252
+
1289
1253
case SILLinkage::PublicExternal:
1290
1254
if (isDefinition) {
1291
1255
return RESULT (AvailableExternally, Default);
@@ -1294,15 +1258,12 @@ llvm::GlobalValue::VISIBILITY##Visibility }
1294
1258
if (isWeakImported)
1295
1259
return RESULT (ExternalWeak, Default);
1296
1260
return RESULT (External, Default);
1261
+
1297
1262
case SILLinkage::HiddenExternal:
1298
- case SILLinkage::PrivateExternal: {
1299
- auto visibility = isFragile ? llvm::GlobalValue::DefaultVisibility
1300
- : llvm::GlobalValue::HiddenVisibility;
1301
- if (isDefinition) {
1302
- return {llvm::GlobalValue::AvailableExternallyLinkage, visibility};
1303
- }
1304
- return {llvm::GlobalValue::ExternalLinkage, visibility};
1305
- }
1263
+ case SILLinkage::PrivateExternal:
1264
+ if (isDefinition)
1265
+ return RESULT (AvailableExternally, Hidden);
1266
+ return RESULT (External, Hidden);
1306
1267
}
1307
1268
llvm_unreachable (" bad SIL linkage" );
1308
1269
}
@@ -1317,7 +1278,6 @@ static void updateLinkageForDefinition(IRGenModule &IGM,
1317
1278
auto linkage = getIRLinkage (
1318
1279
IGM,
1319
1280
entity.getLinkage (IGM, ForDefinition),
1320
- entity.isFragile (IGM),
1321
1281
ForDefinition,
1322
1282
entity.isWeakImported (IGM.SILMod ->getSwiftModule ()));
1323
1283
global->setLinkage (linkage.first );
@@ -1343,7 +1303,6 @@ LinkInfo LinkInfo::get(IRGenModule &IGM, const LinkEntity &entity,
1343
1303
1344
1304
std::tie (result.Linkage , result.Visibility ) =
1345
1305
getIRLinkage (IGM, entity.getLinkage (IGM, isDefinition),
1346
- entity.isFragile (IGM),
1347
1306
isDefinition,
1348
1307
entity.isWeakImported (IGM.SILMod ->getSwiftModule ()));
1349
1308
0 commit comments