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