Author: Ryan Senanayake Date: 2022-03-09T00:39:48Z New Revision: b3dae59b9dfb579d396bd97ca1b5a16529daac75
URL: https://github.com/llvm/llvm-project/commit/b3dae59b9dfb579d396bd97ca1b5a16529daac75 DIFF: https://github.com/llvm/llvm-project/commit/b3dae59b9dfb579d396bd97ca1b5a16529daac75.diff LOG: [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 Added: Modified: clang/lib/CodeGen/CodeGenAction.cpp clang/unittests/Frontend/CodeGenActionTest.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index c2c508dedb097..807880fd4fd7a 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -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; diff --git a/clang/unittests/Frontend/CodeGenActionTest.cpp b/clang/unittests/Frontend/CodeGenActionTest.cpp index 455ec705f884d..f932be639191a 100644 --- a/clang/unittests/Frontend/CodeGenActionTest.cpp +++ b/clang/unittests/Frontend/CodeGenActionTest.cpp @@ -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); +} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits