diff options
| author | Ed Schouten <ed@FreeBSD.org> | 2009-06-27 10:45:02 +0000 | 
|---|---|---|
| committer | Ed Schouten <ed@FreeBSD.org> | 2009-06-27 10:45:02 +0000 | 
| commit | 4ebdf5c4f587daef4e0be499802eac3a7a49bf2f (patch) | |
| tree | 2c5a83521a20c02e7805581a174008aa9bc23579 /lib/CodeGen/CodeGenModule.cpp | |
| parent | f698f7e71940663e26a4806a96fb0bdfa160c886 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index f926c05a9983..0a531e9b21a6 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -406,11 +406,12 @@ void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {  void CodeGenModule::EmitLLVMUsed() {    // Don't create llvm.used if there is no need. -  if (LLVMUsed.empty()) +  // FIXME. Runtime indicates that there might be more 'used' symbols; but not +  // necessariy. So, this test is not accurate for emptiness. +  if (LLVMUsed.empty() && !Runtime)      return;    llvm::Type *i8PTy = llvm::PointerType::getUnqual(llvm::Type::Int8Ty); -  llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, LLVMUsed.size());    // Convert LLVMUsed to what ConstantArray needs.    std::vector<llvm::Constant*> UsedArray; @@ -420,6 +421,12 @@ void CodeGenModule::EmitLLVMUsed() {       llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*LLVMUsed[i]), i8PTy);    } +  if (Runtime) +    Runtime->MergeMetadataGlobals(UsedArray); +  if (UsedArray.empty()) +    return; +  llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, UsedArray.size()); +      llvm::GlobalVariable *GV =       new llvm::GlobalVariable(ATy, false,                                llvm::GlobalValue::AppendingLinkage, | 
