[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
This revision was automatically updated to reflect the committed changes. Closed by commit rC326566: Add possibility to specify output stream for CompilerInstance (authored by AlexeySotkin, committed by ). Changed prior to commit: https://reviews.llvm.org/D43809?vs=136252=136715#toc Repository: rC Clang https://reviews.llvm.org/D43809 Files: include/clang/Frontend/CompilerInstance.h lib/CodeGen/CodeGenAction.cpp unittests/Frontend/CMakeLists.txt unittests/Frontend/OutputStreamTest.cpp Index: lib/CodeGen/CodeGenAction.cpp === --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -846,7 +846,10 @@ std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance , StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr OS = CI.takeOutputStream(); + if (!OS) +OS = GetOutputStream(CI, InFile, BA); + if (BA != Backend_EmitNothing && !OS) return nullptr; Index: unittests/Frontend/OutputStreamTest.cpp === --- unittests/Frontend/OutputStreamTest.cpp +++ unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,46 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/FrontendTool/Utils.h" +#include "clang/Lex/PreprocessorOptions.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + +TEST(FrontendOutputTests, TestOutputStream) { + auto Invocation = std::make_shared(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", InputKind::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + SmallVectorIRBuffer; + std::unique_ptr IRStream( + new raw_svector_ostream(IRBuffer)); + + Compiler.setOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} Index: unittests/Frontend/CMakeLists.txt === --- unittests/Frontend/CMakeLists.txt +++ unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ clangLex clangSema clangCodeGen + clangFrontendTool ) Index: include/clang/Frontend/CompilerInstance.h === --- include/clang/Frontend/CompilerInstance.h +++ include/clang/Frontend/CompilerInstance.h @@ -183,6 +183,9 @@ /// The list of active output files. std::list OutputFiles; + /// Force an output buffer. + std::unique_ptr OutputStream; + CompilerInstance(const CompilerInstance &) = delete; void operator=(const CompilerInstance &) = delete; public: @@ -773,6 +776,14 @@ /// } + void setOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); + } + + std::unique_ptr takeOutputStream() { +return std::move(OutputStream); + } + // Create module manager. void createModuleManager(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
teemperor accepted this revision. teemperor added a comment. This revision is now accepted and ready to land. LGTM! Repository: rC Clang https://reviews.llvm.org/D43809 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
krisb updated this revision to Diff 136252. krisb added a comment. Reverted unintentional changes again. Sorry for that Repository: rC Clang https://reviews.llvm.org/D43809 Files: include/clang/Frontend/CompilerInstance.h lib/CodeGen/CodeGenAction.cpp unittests/Frontend/CMakeLists.txt unittests/Frontend/OutputStreamTest.cpp Index: unittests/Frontend/OutputStreamTest.cpp === --- /dev/null +++ unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,46 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/FrontendTool/Utils.h" +#include "clang/Lex/PreprocessorOptions.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + +TEST(FrontendOutputTests, TestOutputStream) { + auto Invocation = std::make_shared(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", InputKind::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + SmallVectorIRBuffer; + std::unique_ptr IRStream( + new raw_svector_ostream(IRBuffer)); + + Compiler.setOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} Index: unittests/Frontend/CMakeLists.txt === --- unittests/Frontend/CMakeLists.txt +++ unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ clangLex clangSema clangCodeGen + clangFrontendTool ) Index: lib/CodeGen/CodeGenAction.cpp === --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -846,7 +846,10 @@ std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance , StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr OS = CI.takeOutputStream(); + if (!OS) +OS = GetOutputStream(CI, InFile, BA); + if (BA != Backend_EmitNothing && !OS) return nullptr; Index: include/clang/Frontend/CompilerInstance.h === --- include/clang/Frontend/CompilerInstance.h +++ include/clang/Frontend/CompilerInstance.h @@ -183,6 +183,9 @@ /// The list of active output files. std::list OutputFiles; + /// Force an output buffer. + std::unique_ptr OutputStream; + CompilerInstance(const CompilerInstance &) = delete; void operator=(const CompilerInstance &) = delete; public: @@ -773,6 +776,14 @@ /// } + void setOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); + } + + std::unique_ptr takeOutputStream() { +return std::move(OutputStream); + } + // Create module manager. void createModuleManager(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
krisb updated this revision to Diff 136251. krisb added a comment. @teemperor, thanks! All comments are applied. Repository: rC Clang https://reviews.llvm.org/D43809 Files: include/clang/Frontend/CompilerInstance.h lib/CodeGen/CodeGenAction.cpp unittests/Format/FormatTest.cpp unittests/Frontend/CMakeLists.txt unittests/Frontend/OutputStreamTest.cpp Index: unittests/Frontend/OutputStreamTest.cpp === --- /dev/null +++ unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,46 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/FrontendTool/Utils.h" +#include "clang/Lex/PreprocessorOptions.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + +TEST(FrontendOutputTests, TestOutputStream) { + auto Invocation = std::make_shared(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", InputKind::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + SmallVectorIRBuffer; + std::unique_ptr IRStream( + new raw_svector_ostream(IRBuffer)); + + Compiler.setOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} Index: unittests/Frontend/CMakeLists.txt === --- unittests/Frontend/CMakeLists.txt +++ unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ clangLex clangSema clangCodeGen + clangFrontendTool ) Index: unittests/Format/FormatTest.cpp === --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -11985,7 +11985,7 @@ {"foo", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, }; INSTANTIATE_TEST_CASE_P(ValidLanguages, GuessLanguageTest, -::testing::ValuesIn(TestCases)); +::testing::ValuesIn(TestCases), ); } // end namespace } // end namespace format Index: lib/CodeGen/CodeGenAction.cpp === --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -846,7 +846,10 @@ std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance , StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr OS = CI.takeOutputStream(); + if (!OS) +OS = GetOutputStream(CI, InFile, BA); + if (BA != Backend_EmitNothing && !OS) return nullptr; Index: include/clang/Frontend/CompilerInstance.h === --- include/clang/Frontend/CompilerInstance.h +++ include/clang/Frontend/CompilerInstance.h @@ -183,6 +183,9 @@ /// The list of active output files. std::list OutputFiles; + /// Force an output buffer. + std::unique_ptr OutputStream; + CompilerInstance(const CompilerInstance &) = delete; void operator=(const CompilerInstance &) = delete; public: @@ -773,6 +776,14 @@ /// } + void setOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); + } + + std::unique_ptr takeOutputStream() { +return std::move(OutputStream); + } + // Create module manager. void createModuleManager(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
teemperor requested changes to this revision. teemperor added a comment. This revision now requires changes to proceed. See the inline comments. Please run clang-format over this patch after addressing them (there are a few indentation issues). Comment at: include/clang/Frontend/CompilerInstance.h:779 + void SetOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); "Set" -> "set", LLVM code style requires lower case first letters in function names (even though it's sadly may be inconsistent with other code that's still using the other style...) Comment at: include/clang/Frontend/CompilerInstance.h:783 + + std::unique_ptr GetOutputStream() { +return std::move(OutputStream); LLVM convention is to call this `takeX` and not `getX` when it moves the member `OutputStream` to the caller. `get` usually doesn't reset the member variable. Comment at: lib/Frontend/CompilerInstance.cpp:65 + ThePCHContainerOperations(std::move(PCHContainerOps)), + OutputStream(nullptr) { // Don't allow this to invalidate buffers in use by others. Don't think we need that. Repository: rC Clang https://reviews.llvm.org/D43809 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
krisb updated this revision to Diff 136041. krisb added a comment. Reverted unintentional changes. Repository: rC Clang https://reviews.llvm.org/D43809 Files: include/clang/Frontend/CompilerInstance.h lib/CodeGen/CodeGenAction.cpp lib/Frontend/CompilerInstance.cpp unittests/Frontend/CMakeLists.txt unittests/Frontend/OutputStreamTest.cpp Index: unittests/Frontend/OutputStreamTest.cpp === --- /dev/null +++ unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,47 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/FrontendTool/Utils.h" +#include "clang/Lex/PreprocessorOptions.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + +TEST(FrontendOutputTests, TestOutputStream) { + auto Invocation = std::make_shared(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", + MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", InputKind::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + SmallVectorIRBuffer; + std::unique_ptr + IRStream(new raw_svector_ostream(IRBuffer)); + + Compiler.SetOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} Index: unittests/Frontend/CMakeLists.txt === --- unittests/Frontend/CMakeLists.txt +++ unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ clangLex clangSema clangCodeGen + clangFrontendTool ) Index: lib/Frontend/CompilerInstance.cpp === --- lib/Frontend/CompilerInstance.cpp +++ lib/Frontend/CompilerInstance.cpp @@ -61,7 +61,8 @@ : ModuleLoader(/* BuildingModule = */ SharedPCMCache), Invocation(new CompilerInvocation()), PCMCache(SharedPCMCache ? SharedPCMCache : new MemoryBufferCache), - ThePCHContainerOperations(std::move(PCHContainerOps)) { + ThePCHContainerOperations(std::move(PCHContainerOps)), + OutputStream(nullptr) { // Don't allow this to invalidate buffers in use by others. if (SharedPCMCache) getPCMCache().finalizeCurrentBuffers(); Index: lib/CodeGen/CodeGenAction.cpp === --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -846,7 +846,10 @@ std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance , StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr OS = CI.GetOutputStream(); + if (!OS) +OS = GetOutputStream(CI, InFile, BA); + if (BA != Backend_EmitNothing && !OS) return nullptr; Index: include/clang/Frontend/CompilerInstance.h === --- include/clang/Frontend/CompilerInstance.h +++ include/clang/Frontend/CompilerInstance.h @@ -183,6 +183,9 @@ /// The list of active output files. std::list OutputFiles; + /// Force an output buffer + std::unique_ptr OutputStream; + CompilerInstance(const CompilerInstance &) = delete; void operator=(const CompilerInstance &) = delete; public: @@ -773,6 +776,14 @@ /// } + void SetOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); + } + + std::unique_ptr GetOutputStream() { +return std::move(OutputStream); + } + // Create module manager. void createModuleManager(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D43809: Add possibility to specify output stream for CompilerInstance
krisb created this revision. Herald added subscribers: cfe-commits, mgorny, klimek. Repository: rC Clang https://reviews.llvm.org/D43809 Files: include/clang/Frontend/CompilerInstance.h lib/CodeGen/CodeGenAction.cpp lib/Frontend/CompilerInstance.cpp unittests/Format/FormatTest.cpp unittests/Frontend/CMakeLists.txt unittests/Frontend/OutputStreamTest.cpp Index: unittests/Frontend/OutputStreamTest.cpp === --- /dev/null +++ unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,47 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/FrontendTool/Utils.h" +#include "clang/Lex/PreprocessorOptions.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + +TEST(FrontendOutputTests, TestOutputStream) { + auto Invocation = std::make_shared(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", + MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", InputKind::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + SmallVectorIRBuffer; + std::unique_ptr + IRStream(new raw_svector_ostream(IRBuffer)); + + Compiler.SetOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} Index: unittests/Frontend/CMakeLists.txt === --- unittests/Frontend/CMakeLists.txt +++ unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ clangLex clangSema clangCodeGen + clangFrontendTool ) Index: unittests/Format/FormatTest.cpp === --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -11985,7 +11985,7 @@ {"foo", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, }; INSTANTIATE_TEST_CASE_P(ValidLanguages, GuessLanguageTest, -::testing::ValuesIn(TestCases)); +::testing::ValuesIn(TestCases), ); } // end namespace } // end namespace format Index: lib/Frontend/CompilerInstance.cpp === --- lib/Frontend/CompilerInstance.cpp +++ lib/Frontend/CompilerInstance.cpp @@ -61,7 +61,8 @@ : ModuleLoader(/* BuildingModule = */ SharedPCMCache), Invocation(new CompilerInvocation()), PCMCache(SharedPCMCache ? SharedPCMCache : new MemoryBufferCache), - ThePCHContainerOperations(std::move(PCHContainerOps)) { + ThePCHContainerOperations(std::move(PCHContainerOps)), + OutputStream(nullptr) { // Don't allow this to invalidate buffers in use by others. if (SharedPCMCache) getPCMCache().finalizeCurrentBuffers(); Index: lib/CodeGen/CodeGenAction.cpp === --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -846,7 +846,10 @@ std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance , StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr OS = CI.GetOutputStream(); + if (!OS) +OS = GetOutputStream(CI, InFile, BA); + if (BA != Backend_EmitNothing && !OS) return nullptr; Index: include/clang/Frontend/CompilerInstance.h === --- include/clang/Frontend/CompilerInstance.h +++ include/clang/Frontend/CompilerInstance.h @@ -183,6 +183,9 @@ /// The list of active output files. std::list OutputFiles; + /// Force an output buffer + std::unique_ptr OutputStream; + CompilerInstance(const CompilerInstance &) = delete; void operator=(const CompilerInstance &) = delete; public: @@ -773,6 +776,14 @@ /// } + void SetOutputStream(std::unique_ptr OutStream) { +OutputStream = std::move(OutStream); + } + + std::unique_ptr GetOutputStream() { +return std::move(OutputStream); + } +