1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | #include "clang/AST/ASTConsumer.h" |
10 | #include "clang/AST/ASTContext.h" |
11 | #include "clang/AST/RecursiveASTVisitor.h" |
12 | #include "clang/Basic/TargetInfo.h" |
13 | #include "clang/CodeGen/ModuleBuilder.h" |
14 | #include "clang/Frontend/CompilerInstance.h" |
15 | #include "clang/Lex/Preprocessor.h" |
16 | #include "clang/Parse/ParseAST.h" |
17 | #include "clang/Sema/Sema.h" |
18 | #include "llvm/ADT/Triple.h" |
19 | #include "llvm/IR/LLVMContext.h" |
20 | #include "llvm/Support/Host.h" |
21 | #include "llvm/Support/MemoryBuffer.h" |
22 | #include "gtest/gtest.h" |
23 | |
24 | using namespace llvm; |
25 | using namespace clang; |
26 | |
27 | namespace { |
28 | |
29 | |
30 | |
31 | |
32 | const char TestProgram[] = |
33 | "class EmitCXXGlobalInitFunc " |
34 | "{ " |
35 | "public: " |
36 | " EmitCXXGlobalInitFunc() {} " |
37 | "}; " |
38 | "EmitCXXGlobalInitFunc test; "; |
39 | |
40 | TEST(BufferSourceTest, EmitCXXGlobalInitFunc) { |
41 | LLVMContext Context; |
42 | CompilerInstance compiler; |
43 | |
44 | compiler.createDiagnostics(); |
45 | compiler.getLangOpts().CPlusPlus = 1; |
46 | compiler.getLangOpts().CPlusPlus11 = 1; |
47 | |
48 | compiler.getTargetOpts().Triple = llvm::Triple::normalize( |
49 | llvm::sys::getProcessTriple()); |
50 | compiler.setTarget(clang::TargetInfo::CreateTargetInfo( |
51 | compiler.getDiagnostics(), |
52 | std::make_shared<clang::TargetOptions>( |
53 | compiler.getTargetOpts()))); |
54 | |
55 | compiler.createFileManager(); |
56 | compiler.createSourceManager(compiler.getFileManager()); |
57 | compiler.createPreprocessor(clang::TU_Prefix); |
58 | |
59 | compiler.createASTContext(); |
60 | |
61 | compiler.setASTConsumer(std::unique_ptr<ASTConsumer>( |
62 | CreateLLVMCodeGen( |
63 | compiler.getDiagnostics(), |
64 | "EmitCXXGlobalInitFuncTest", |
65 | compiler.getHeaderSearchOpts(), |
66 | compiler.getPreprocessorOpts(), |
67 | compiler.getCodeGenOpts(), |
68 | Context))); |
69 | |
70 | compiler.createSema(clang::TU_Prefix, nullptr); |
71 | |
72 | clang::SourceManager &sm = compiler.getSourceManager(); |
73 | sm.setMainFileID(sm.createFileID( |
74 | llvm::MemoryBuffer::getMemBuffer(TestProgram), clang::SrcMgr::C_User)); |
75 | |
76 | clang::ParseAST(compiler.getSema(), false, false); |
77 | } |
78 | |
79 | } |
80 | |