summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:31:31 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:31:31 +0000
commite5dd70708596ae51455a0ffa086a00c5b29f8583 (patch)
tree5d676f27b570bacf71e786c3b5cff3e6f6679b59 /gnu/llvm/clang/unittests/Frontend/OutputStreamTest.cpp
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-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.cpp103
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"));
+}
+}