diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index ebfbe991881c60..490f5b3de1ff3e 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1759,24 +1759,22 @@ void clang::EmbedObject(llvm::Module *M, const CodeGenOptions &CGOpts, return; for (StringRef OffloadObject : CGOpts.OffloadObjects) { - if (OffloadObject.count(',') != 1) { + if (OffloadObject.count(',') != 1) Diags.Report(Diags.getCustomDiagID( DiagnosticsEngine::Error, "Invalid string pair for embedding '%0'")) << OffloadObject; - return; - } auto FilenameAndSection = OffloadObject.split(','); llvm::ErrorOr> ObjectOrErr = - llvm::MemoryBuffer::getFileOrSTDIN(std::get<0>(FilenameAndSection)); + llvm::MemoryBuffer::getFileOrSTDIN(FilenameAndSection.first); if (std::error_code EC = ObjectOrErr.getError()) { auto DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error, "could not open '%0' for embedding"); - Diags.Report(DiagID) << std::get<0>(FilenameAndSection); + Diags.Report(DiagID) << FilenameAndSection.first; return; } SmallString<128> SectionName( - {".llvm.offloading.", std::get<1>(FilenameAndSection)}); + {".llvm.offloading.", FilenameAndSection.second}); llvm::embedBufferInModule(*M, **ObjectOrErr, SectionName); } } diff --git a/clang/test/Frontend/embed-object.ll b/clang/test/Frontend/embed-object.ll index 49b477d4a7be0d..3270a7806210b4 100644 --- a/clang/test/Frontend/embed-object.ll +++ b/clang/test/Frontend/embed-object.ll @@ -3,8 +3,8 @@ ; RUN: -fembed-offload-object=%S/Inputs/empty.h,section2 -x ir %s -o - \ ; RUN: | FileCheck %s -check-prefix=CHECK -; CHECK: @[[OBJECT1:.+]] = private constant [0 x i8] zeroinitializer, section ".llvm.offloading.section1" -; CHECK: @[[OBJECT2:.+]] = private constant [0 x i8] zeroinitializer, section ".llvm.offloading.section2" +; CHECK: @[[OBJECT1:.+]] = hidden constant [0 x i8] zeroinitializer, section ".llvm.offloading.section1" +; CHECK: @[[OBJECT2:.+]] = hidden constant [0 x i8] zeroinitializer, section ".llvm.offloading.section2" ; CHECK: @llvm.compiler.used = appending global [3 x i8*] [i8* @x, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @[[OBJECT1]], i32 0, i32 0), i8* getelementptr inbounds ([0 x i8], [0 x i8]* @[[OBJECT2]], i32 0, i32 0)], section "llvm.metadata" @x = private constant i8 1 diff --git a/llvm/lib/Transforms/Utils/ModuleUtils.cpp b/llvm/lib/Transforms/Utils/ModuleUtils.cpp index 61cf42db4a755a..032ea803979773 100644 --- a/llvm/lib/Transforms/Utils/ModuleUtils.cpp +++ b/llvm/lib/Transforms/Utils/ModuleUtils.cpp @@ -271,9 +271,10 @@ void llvm::embedBufferInModule(Module &M, MemoryBufferRef Buf, Constant *ModuleConstant = ConstantDataArray::get( M.getContext(), makeArrayRef(Buf.getBufferStart(), Buf.getBufferSize())); GlobalVariable *GV = new GlobalVariable( - M, ModuleConstant->getType(), true, GlobalValue::PrivateLinkage, - ModuleConstant, "llvm.embedded.object"); + M, ModuleConstant->getType(), true, GlobalValue::ExternalLinkage, + ModuleConstant, SectionName.drop_front()); GV->setSection(SectionName); + GV->setVisibility(GlobalValue::HiddenVisibility); appendToCompilerUsed(M, GV); }