diff options
author | Alexey Sotkin <alexey.sotkin@intel.com> | 2018-03-02 12:11:40 +0000 |
---|---|---|
committer | Alexey Sotkin <alexey.sotkin@intel.com> | 2018-03-02 12:11:40 +0000 |
commit | 27484d0f23804b3cc71ee56e5961ac7ae3993a8a (patch) | |
tree | 373af58b4f95797ae4cffd83643be0985144dc2e /unittests/Frontend | |
parent | 07b412d4eed907c22ca8d28e609dafb8a5490d41 (diff) | |
download | clang-27484d0f23804b3cc71ee56e5961ac7ae3993a8a.tar.gz |
Add possibility to specify output stream for CompilerInstance
Patch by: krisb
Reviewers: teemperor
Reviewed By: teemperor
Subscribers: klimek, mgorny, cfe-commits
Differential Revision: https://reviews.llvm.org/D43809
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@326566 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Frontend')
-rw-r--r-- | unittests/Frontend/CMakeLists.txt | 2 | ||||
-rw-r--r-- | unittests/Frontend/OutputStreamTest.cpp | 46 |
2 files changed, 48 insertions, 0 deletions
diff --git a/unittests/Frontend/CMakeLists.txt b/unittests/Frontend/CMakeLists.txt index f3c4336ea2..c764fb9e2a 100644 --- a/unittests/Frontend/CMakeLists.txt +++ b/unittests/Frontend/CMakeLists.txt @@ -9,6 +9,7 @@ add_clang_unittest(FrontendTests CodeGenActionTest.cpp ParsedSourceLocationTest.cpp PCHPreambleTest.cpp + OutputStreamTest.cpp ) target_link_libraries(FrontendTests PRIVATE @@ -18,4 +19,5 @@ target_link_libraries(FrontendTests clangLex clangSema clangCodeGen + clangFrontendTool ) diff --git a/unittests/Frontend/OutputStreamTest.cpp b/unittests/Frontend/OutputStreamTest.cpp new file mode 100644 index 0000000000..ff036500d8 --- /dev/null +++ b/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<CompilerInvocation>(); + 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; + + SmallVector<char, 256> IRBuffer; + std::unique_ptr<raw_pwrite_stream> IRStream( + new raw_svector_ostream(IRBuffer)); + + Compiler.setOutputStream(std::move(IRStream)); + Compiler.setInvocation(std::move(Invocation)); + Compiler.createDiagnostics(); + + bool Success = ExecuteCompilerInvocation(&Compiler); + EXPECT_TRUE(Success); + EXPECT_TRUE(!IRBuffer.empty()); + EXPECT_TRUE(StringRef(IRBuffer.data()).startswith("BC")); +} +} |