diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:23:48 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:23:48 +0000 | 
| commit | 06d4ba388873e6d1cfa9cd715a8935ecc8cd2097 (patch) | |
| tree | 3eb853da77d46cc77c4b017525a422f9ddb1385b /unittests/CodeGen | |
| parent | 30d791273d07fac9c0c1641a0731191bca6e8606 (diff) | |
Diffstat (limited to 'unittests/CodeGen')
| -rw-r--r-- | unittests/CodeGen/BufferSourceTest.cpp | 78 | ||||
| -rw-r--r-- | unittests/CodeGen/CMakeLists.txt | 15 | ||||
| -rw-r--r-- | unittests/CodeGen/Makefile | 20 | 
3 files changed, 113 insertions, 0 deletions
| diff --git a/unittests/CodeGen/BufferSourceTest.cpp b/unittests/CodeGen/BufferSourceTest.cpp new file mode 100644 index 000000000000..8169a6d0c9e5 --- /dev/null +++ b/unittests/CodeGen/BufferSourceTest.cpp @@ -0,0 +1,78 @@ +//===- unittests/CodeGen/BufferSourceTest.cpp - MemoryBuffer source tests -===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "clang/AST/ASTConsumer.h" +#include "clang/AST/ASTContext.h" +#include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Basic/TargetInfo.h" +#include "clang/CodeGen/ModuleBuilder.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Lex/Preprocessor.h" +#include "clang/Parse/ParseAST.h" +#include "clang/Sema/Sema.h" +#include "llvm/ADT/Triple.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/MemoryBuffer.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace clang; + +namespace { + +// Emitting constructors for global objects involves looking +// at the source file name. This makes sure that we don't crash +// if the source file is a memory buffer. +const char TestProgram[] = +    "class EmitCXXGlobalInitFunc    " +    "{                              " +    "public:                        " +    "   EmitCXXGlobalInitFunc() {}  " +    "};                             " +    "EmitCXXGlobalInitFunc test;    "; + +TEST(BufferSourceTest, EmitCXXGlobalInitFunc) { +    CompilerInstance compiler; + +    compiler.createDiagnostics(); +    compiler.getLangOpts().CPlusPlus = 1; +    compiler.getLangOpts().CPlusPlus11 = 1; + +    compiler.getTargetOpts().Triple = llvm::Triple::normalize( +        llvm::sys::getProcessTriple()); +    compiler.setTarget(clang::TargetInfo::CreateTargetInfo( +      compiler.getDiagnostics(), +      std::make_shared<clang::TargetOptions>( +        compiler.getTargetOpts()))); + +    compiler.createFileManager(); +    compiler.createSourceManager(compiler.getFileManager()); +    compiler.createPreprocessor(clang::TU_Prefix); + +    compiler.createASTContext(); + +    compiler.setASTConsumer(std::unique_ptr<ASTConsumer>( +        CreateLLVMCodeGen( +            compiler.getDiagnostics(), +            "EmitCXXGlobalInitFuncTest", +            compiler.getCodeGenOpts(), +            compiler.getTargetOpts(), +            llvm::getGlobalContext()))); + +    compiler.createSema(clang::TU_Prefix,NULL); + +    clang::SourceManager &sm = compiler.getSourceManager(); +    sm.setMainFileID(sm.createFileID( +        llvm::MemoryBuffer::getMemBuffer(TestProgram), clang::SrcMgr::C_User)); + +    clang::ParseAST(compiler.getSema(), false, false); +} + +} diff --git a/unittests/CodeGen/CMakeLists.txt b/unittests/CodeGen/CMakeLists.txt new file mode 100644 index 000000000000..27a513a2f982 --- /dev/null +++ b/unittests/CodeGen/CMakeLists.txt @@ -0,0 +1,15 @@ +set(LLVM_LINK_COMPONENTS +  Core +  Support +  ) + +add_clang_unittest(ClangCodeGenTests +  BufferSourceTest.cpp +  ) + +target_link_libraries(ClangCodeGenTests +  clangBasic +  clangCodeGen +  clangFrontend +  clangParse +  ) diff --git a/unittests/CodeGen/Makefile b/unittests/CodeGen/Makefile new file mode 100644 index 000000000000..de347e1afddc --- /dev/null +++ b/unittests/CodeGen/Makefile @@ -0,0 +1,20 @@ +##===- unittests/CodeGen/Makefile --------------------------*- Makefile -*-===## +# +#                     The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +CLANG_LEVEL = ../.. +TESTNAME = CodeGen +include $(CLANG_LEVEL)/../../Makefile.config +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader mc option \ +                   profiledata support +USEDLIBS = clangCodeGen.a clangFrontend.a clangSerialization.a \ +           clangDriver.a \ +           clangParse.a clangSema.a clangAnalysis.a \ +           clangEdit.a clangAST.a clangLex.a clangBasic.a + +include $(CLANG_LEVEL)/unittests/Makefile | 
