summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2015-05-09 21:10:07 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2015-05-09 21:10:07 +0000
commitc7da6da58ec7447aabcae967dcc7bf222a5dff76 (patch)
tree93ada3ab35d01f66fd6d473c2e01372dd65c9c40 /clang/lib/CodeGen/CodeGenModule.cpp
parent1af9c7b9d4f0c0150419aa7887e9f67262cc615c (diff)
downloadbcm5719-llvm-c7da6da58ec7447aabcae967dcc7bf222a5dff76.tar.gz
bcm5719-llvm-c7da6da58ec7447aabcae967dcc7bf222a5dff76.zip
Revert r236879, "Do not emit thunks with available_externally linkage in comdats"
It broke pecoff, at least i686-cygwin. llvm-svn: 236937
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index b3d7b5d4f6d..d75dcd22134 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1298,7 +1298,8 @@ llvm::Constant *CodeGenModule::GetAddrOfUuidDescriptor(
auto *GV = new llvm::GlobalVariable(
getModule(), Init->getType(),
/*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
- maybeSetTrivialComdat(*GV);
+ if (supportsCOMDAT())
+ GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
return GV;
}
@@ -1849,7 +1850,9 @@ CodeGenModule::CreateOrReplaceCXXRuntimeVariable(StringRef Name,
OldGV->eraseFromParent();
}
- maybeSetTrivialComdat(*GV);
+ if (supportsCOMDAT() && GV->isWeakForLinker() &&
+ !GV->hasAvailableExternallyLinkage())
+ GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
return GV;
}
@@ -1982,14 +1985,6 @@ void CodeGenModule::maybeSetTrivialComdat(const Decl &D,
GO.setComdat(TheModule.getOrInsertComdat(GO.getName()));
}
-void CodeGenModule::maybeSetTrivialComdat(llvm::GlobalObject &GO) {
- if (!supportsCOMDAT())
- return;
- if (GO.isWeakForLinker() && !GO.hasAvailableExternallyLinkage()) {
- GO.setComdat(getModule().getOrInsertComdat(GO.getName()));
- }
-}
-
void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
llvm::Constant *Init = nullptr;
QualType ASTTy = D->getType();
@@ -2929,7 +2924,10 @@ GenerateStringLiteral(llvm::Constant *C, llvm::GlobalValue::LinkageTypes LT,
nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace);
GV->setAlignment(Alignment);
GV->setUnnamedAddr(true);
- CGM.maybeSetTrivialComdat(*GV);
+ if (GV->isWeakForLinker()) {
+ assert(CGM.supportsCOMDAT() && "Only COFF uses weak string literals");
+ GV->setComdat(M.getOrInsertComdat(GV->getName()));
+ }
return GV;
}
@@ -3111,7 +3109,8 @@ llvm::Constant *CodeGenModule::GetAddrOfGlobalTemporary(
setGlobalVisibility(GV, VD);
GV->setAlignment(
getContext().getTypeAlignInChars(MaterializedType).getQuantity());
- maybeSetTrivialComdat(*GV);
+ if (supportsCOMDAT() && GV->isWeakForLinker())
+ GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
if (VD->getTLSKind())
setTLSMode(GV, *VD);
Slot = GV;
OpenPOWER on IntegriCloud