@@ -2324,11 +2324,11 @@ void IRGenerator::emitEntryPointInfo() {
23242324 IGM.addUsedGlobal (var);
23252325}
23262326
2327- static IRLinkage
2328- getIRLinkage (StringRef name, const UniversalLinkageInfo &info ,
2329- SILLinkage linkage, ForDefinition_t isDefinition ,
2330- bool isWeakImported, bool isKnownLocal ,
2331- bool hasNonUniqueDefinition ) {
2327+ static IRLinkage getIRLinkage (StringRef name, const UniversalLinkageInfo &info,
2328+ SILLinkage linkage, ForDefinition_t isDefinition ,
2329+ bool isWeakImported, bool isKnownLocal ,
2330+ bool hasNonUniqueDefinition ,
2331+ bool privateMeansPrivate ) {
23322332#define RESULT (LINKAGE, VISIBILITY, DLL_STORAGE ) \
23332333 IRLinkage{llvm::GlobalValue::LINKAGE##Linkage, \
23342334 llvm::GlobalValue::VISIBILITY##Visibility, \
@@ -2390,12 +2390,15 @@ getIRLinkage(StringRef name, const UniversalLinkageInfo &info,
23902390 case SILLinkage::Private: {
23912391 if (info.forcePublicDecls () && !isDefinition)
23922392 return getIRLinkage (name, info, SILLinkage::PublicExternal, isDefinition,
2393- isWeakImported, isKnownLocal, hasNonUniqueDefinition);
2394-
2395- auto linkage = info.needLinkerToMergeDuplicateSymbols ()
2396- ? llvm::GlobalValue::LinkOnceODRLinkage
2397- : llvm::GlobalValue::InternalLinkage;
2398- auto visibility = info.shouldAllPrivateDeclsBeVisibleFromOtherFiles ()
2393+ isWeakImported, isKnownLocal, hasNonUniqueDefinition,
2394+ privateMeansPrivate);
2395+
2396+ auto linkage =
2397+ info.needLinkerToMergeDuplicateSymbols () && !privateMeansPrivate
2398+ ? llvm::GlobalValue::LinkOnceODRLinkage
2399+ : llvm::GlobalValue::InternalLinkage;
2400+ auto visibility = info.shouldAllPrivateDeclsBeVisibleFromOtherFiles () &&
2401+ !privateMeansPrivate
23992402 ? llvm::GlobalValue::HiddenVisibility
24002403 : llvm::GlobalValue::DefaultVisibility;
24012404 return {linkage, visibility, llvm::GlobalValue::DefaultStorageClass};
@@ -2446,8 +2449,8 @@ void irgen::updateLinkageForDefinition(IRGenModule &IGM,
24462449 auto IRL =
24472450 getIRLinkage (global->hasName () ? global->getName () : StringRef (),
24482451 linkInfo, entity.getLinkage (ForDefinition), ForDefinition,
2449- weakImported, isKnownLocal,
2450- entity.hasNonUniqueDefinition ());
2452+ weakImported, isKnownLocal, entity. hasNonUniqueDefinition (),
2453+ entity.privateMeansPrivate ());
24512454 ApplyIRLinkage (IRL).to (global);
24522455
24532456 LinkInfo link = LinkInfo::get (IGM, entity, ForDefinition);
@@ -2498,10 +2501,10 @@ LinkInfo LinkInfo::get(const UniversalLinkageInfo &linkInfo,
24982501 }
24992502
25002503 bool weakImported = entity.isWeakImported (swiftModule);
2501- result.IRL = getIRLinkage (result. Name , linkInfo,
2502- entity.getLinkage (isDefinition), isDefinition,
2503- weakImported, isKnownLocal,
2504- entity.hasNonUniqueDefinition ());
2504+ result.IRL = getIRLinkage (
2505+ result. Name , linkInfo, entity.getLinkage (isDefinition), isDefinition,
2506+ weakImported, isKnownLocal, entity. hasNonUniqueDefinition () ,
2507+ entity.privateMeansPrivate ());
25052508 result.ForDefinition = isDefinition;
25062509 return result;
25072510}
@@ -2513,7 +2516,8 @@ LinkInfo LinkInfo::get(const UniversalLinkageInfo &linkInfo, StringRef name,
25132516 result.Name += name;
25142517 result.IRL = getIRLinkage (name, linkInfo, linkage, isDefinition,
25152518 isWeakImported, linkInfo.Internalize ,
2516- /* hasNonUniqueDefinition=*/ false );
2519+ /* hasNonUniqueDefinition=*/ false ,
2520+ /* privateMeansPrivate=*/ false );
25172521 result.ForDefinition = isDefinition;
25182522 return result;
25192523}
0 commit comments