forked from OSchip/llvm-project
[clang] Fix CodeGenAction for LLVM IR MemBuffers
Replaces use of getCurrentFile with getCurrentFileOrBufferName in CodeGenAction. This avoids an assertion error or an incorrect name chosen for the output file when assertions are disabled. This error previously occurred when the FrontendInputFile was a MemoryBuffer instead of a file. Reviewed By: jlebar Differential Revision: https://reviews.llvm.org/D121259
This commit is contained in:
parent
af22478933
commit
b3dae59b9d
|
@ -1113,7 +1113,7 @@ void CodeGenAction::ExecuteAction() {
|
|||
auto &CodeGenOpts = CI.getCodeGenOpts();
|
||||
auto &Diagnostics = CI.getDiagnostics();
|
||||
std::unique_ptr<raw_pwrite_stream> OS =
|
||||
GetOutputStream(CI, getCurrentFile(), BA);
|
||||
GetOutputStream(CI, getCurrentFileOrBufferName(), BA);
|
||||
if (BA != Backend_EmitNothing && !OS)
|
||||
return;
|
||||
|
||||
|
|
|
@ -59,4 +59,21 @@ TEST(CodeGenTest, TestNullCodeGen) {
|
|||
EXPECT_TRUE(Success);
|
||||
}
|
||||
|
||||
TEST(CodeGenTest, CodeGenFromIRMemBuffer) {
|
||||
auto Invocation = std::make_shared<CompilerInvocation>();
|
||||
std::unique_ptr<MemoryBuffer> MemBuffer =
|
||||
MemoryBuffer::getMemBuffer("", "test.ll");
|
||||
Invocation->getFrontendOpts().Inputs.push_back(
|
||||
FrontendInputFile(*MemBuffer, Language::LLVM_IR));
|
||||
Invocation->getFrontendOpts().ProgramAction = frontend::EmitLLVMOnly;
|
||||
Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
|
||||
CompilerInstance Compiler;
|
||||
Compiler.setInvocation(std::move(Invocation));
|
||||
Compiler.createDiagnostics();
|
||||
EXPECT_TRUE(Compiler.hasDiagnostics());
|
||||
|
||||
EmitLLVMOnlyAction Action;
|
||||
bool Success = Compiler.ExecuteAction(Action);
|
||||
EXPECT_TRUE(Success);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue