//===- unittests/Frontend/CodeGenActionTest.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 // //===----------------------------------------------------------------------===// // // Unit tests for CodeGenAction. // //===----------------------------------------------------------------------===// #include "clang/CodeGen/CodeGenAction.h" #include "clang/Basic/LangStandard.h" #include "clang/CodeGen/BackendUtil.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/PreprocessorOptions.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_EmitMCNull, _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) { auto Invocation = std::make_shared(); Invocation->getPreprocessorOpts().addRemappedFile( "test.cc", MemoryBuffer::getMemBuffer("").release()); Invocation->getFrontendOpts().Inputs.push_back( FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = EmitLLVM; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); Compiler.createDiagnostics(); EXPECT_TRUE(Compiler.hasDiagnostics()); std::unique_ptr Act(new NullCodeGenAction); bool Success = Compiler.ExecuteAction(*Act); EXPECT_TRUE(Success); } }