diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-01-16 20:32:35 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-01-16 20:32:35 +0000 |
commit | d9b26d563adb567d45aac882368b429196b25a24 (patch) | |
tree | d86590b8efc3cbc00a21463616a88fdfc0b23a88 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 9382b1c456d15d2facddc78cef0b1f196e23cad4 (diff) | |
download | llvm-d9b26d563adb567d45aac882368b429196b25a24.zip llvm-d9b26d563adb567d45aac882368b429196b25a24.tar.gz llvm-d9b26d563adb567d45aac882368b429196b25a24.tar.bz2 |
Add comdat to string literal variables on COFF.
llvm-svn: 226317
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 72d7a6c..7845fba 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2876,12 +2876,18 @@ GenerateStringLiteral(llvm::Constant *C, llvm::GlobalValue::LinkageTypes LT, if (CGM.getLangOpts().OpenCL) AddrSpace = CGM.getContext().getTargetAddressSpace(LangAS::opencl_constant); + llvm::Module &M = CGM.getModule(); // Create a global variable for this string auto *GV = new llvm::GlobalVariable( - CGM.getModule(), C->getType(), !CGM.getLangOpts().WritableStrings, LT, C, - GlobalName, nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace); + M, C->getType(), !CGM.getLangOpts().WritableStrings, LT, C, GlobalName, + nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace); GV->setAlignment(Alignment); GV->setUnnamedAddr(true); + if (GV->isWeakForLinker()) { + assert(CGM.supportsCOMDAT() && "Only COFF uses weak string literals"); + GV->setComdat(M.getOrInsertComdat(GV->getName())); + } + return GV; } |