From 29be6b71af1b7278252fc1361859ecf41bf44e91 Mon Sep 17 00:00:00 2001 From: Serge Pavlov Date: Thu, 18 Feb 2016 16:43:24 +0000 Subject: [PATCH] File missed from r261222 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261223 91177308-0d34-0410-b5e6-96231b3b80d8 --- unittests/Frontend/CodeGenActionTest.cpp | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 unittests/Frontend/CodeGenActionTest.cpp diff --git a/unittests/Frontend/CodeGenActionTest.cpp b/unittests/Frontend/CodeGenActionTest.cpp new file mode 100644 index 0000000000..3ff6c4eb40 --- /dev/null +++ b/unittests/Frontend/CodeGenActionTest.cpp @@ -0,0 +1,61 @@ +//===- unittests/Frontend/CodeGenActionTest.cpp --- FrontendAction tests --===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Unit tests for CodeGenAction. +// +//===----------------------------------------------------------------------===// + +#include "clang/Frontend/CompilerInstance.h" +#include "clang/CodeGen/CodeGenAction.h" +#include "clang/CodeGen/BackendUtil.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; +using namespace clang::frontend; + +namespace { + + +class NullCodeGenAction : public CodeGenAction { +public: + NullCodeGenAction(llvm::LLVMContext *_VMContext = nullptr) + : CodeGenAction(Backend_EmitLL, _VMContext) {} + + // The action does not call methods of ATContext. + void ExecuteAction() override { + CompilerInstance &CI = getCompilerInstance(); + if (!CI.hasPreprocessor()) + return; + if (!CI.hasSema()) + CI.createSema(getTranslationUnitKind(), nullptr); + } +}; + + +TEST(CodeGenTest, TestNullCodeGen) { + CompilerInvocation *Invocation = new CompilerInvocation; + Invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", + MemoryBuffer::getMemBuffer("").release()); + Invocation->getFrontendOpts().Inputs.push_back( + FrontendInputFile("test.cc", IK_CXX)); + Invocation->getFrontendOpts().ProgramAction = EmitLLVM; + Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance Compiler; + Compiler.setInvocation(Invocation); + Compiler.createDiagnostics(); + EXPECT_TRUE(Compiler.hasDiagnostics()); + + std::unique_ptr Act(new NullCodeGenAction); + bool Success = Compiler.ExecuteAction(*Act); + EXPECT_TRUE(Success); +} + +} -- 2.40.0