diff options
author | 2020-08-03 14:31:31 +0000 | |
---|---|---|
committer | 2020-08-03 14:31:31 +0000 | |
commit | e5dd70708596ae51455a0ffa086a00c5b29f8583 (patch) | |
tree | 5d676f27b570bacf71e786c3b5cff3e6f6679b59 /gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-e5dd70708596ae51455a0ffa086a00c5b29f8583.tar.xz wireguard-openbsd-e5dd70708596ae51455a0ffa086a00c5b29f8583.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp')
-rw-r--r-- | gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp b/gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp new file mode 100644 index 00000000000..6a867bf053c --- /dev/null +++ b/gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp @@ -0,0 +1,103 @@ +//===- unittests/Frontend/OutputStreamTest.cpp --- FrontendAction tests --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Basic/LangStandard.h" +#include "clang/CodeGen/BackendUtil.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Frontend/TextDiagnosticPrinter.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", Language::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")); +} + +TEST(FrontendOutputTests, TestVerboseOutputStreamShared) { + auto Invocation = std::make_shared<CompilerInvocation>(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("invalid").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", Language::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + std::string VerboseBuffer; + raw_string_ostream VerboseStream(VerboseBuffer); + + Compiler.setOutputStream(std::make_unique<raw_null_ostream>()); + Compiler.setInvocation(std::move(Invocation)); + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); + Compiler.createDiagnostics( + new TextDiagnosticPrinter(llvm::nulls(), &*DiagOpts), true); + Compiler.setVerboseOutputStream(VerboseStream); + + bool Success = ExecuteCompilerInvocation(&Compiler); + EXPECT_FALSE(Success); + EXPECT_TRUE(!VerboseStream.str().empty()); + EXPECT_TRUE(StringRef(VerboseBuffer.data()).contains("errors generated")); +} + +TEST(FrontendOutputTests, TestVerboseOutputStreamOwned) { + std::string VerboseBuffer; + bool Success; + { + auto Invocation = std::make_shared<CompilerInvocation>(); + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("invalid").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", Language::CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitBC; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + + std::unique_ptr<raw_ostream> VerboseStream = + std::make_unique<raw_string_ostream>(VerboseBuffer); + + Compiler.setOutputStream(std::make_unique<raw_null_ostream>()); + Compiler.setInvocation(std::move(Invocation)); + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); + Compiler.createDiagnostics( + new TextDiagnosticPrinter(llvm::nulls(), &*DiagOpts), true); + Compiler.setVerboseOutputStream(std::move(VerboseStream)); + + Success = ExecuteCompilerInvocation(&Compiler); + } + EXPECT_FALSE(Success); + EXPECT_TRUE(!VerboseBuffer.empty()); + EXPECT_TRUE(StringRef(VerboseBuffer.data()).contains("errors generated")); +} +} |