From 8403ccdcd28c2ff30c1e980ce4a8c851fae01a9d Mon Sep 17 00:00:00 2001 From: Alexander Shaposhnikov Date: Tue, 14 Mar 2023 18:12:19 +0000 Subject: [Clang][CodeGen] Fix linkage and visibility of template parameter objects This diff fixes linkage and visibility of template parameter objects. The associated GitHub issue: https://github.com/llvm/llvm-project/issues/51571# Test plan: 1/ ninja check-all 2/ bootstrapped Clang passes tests Differential revision: https://reviews.llvm.org/D145859 --- clang/lib/CodeGen/CodeGenModule.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index b512fb576a2c..7055205862de 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -3238,9 +3238,13 @@ ConstantAddress CodeGenModule::GetAddrOfTemplateParamObject( return ConstantAddress::invalid(); } - auto *GV = new llvm::GlobalVariable( - getModule(), Init->getType(), - /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name); + llvm::GlobalValue::LinkageTypes Linkage = + isExternallyVisible(TPO->getLinkageAndVisibility().getLinkage()) + ? llvm::GlobalValue::LinkOnceODRLinkage + : llvm::GlobalValue::InternalLinkage; + auto *GV = new llvm::GlobalVariable(getModule(), Init->getType(), + /*isConstant=*/true, Linkage, Init, Name); + setGVProperties(GV, TPO); if (supportsCOMDAT()) GV->setComdat(TheModule.getOrInsertComdat(GV->getName())); Emitter.finalize(GV); -- cgit v1.2.3