BufferSourceTest.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //===- unittests/CodeGen/BufferSourceTest.cpp - MemoryBuffer source tests -===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  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. using namespace llvm;
  24. using namespace clang;
  25. namespace {
  26. // Emitting constructors for global objects involves looking
  27. // at the source file name. This makes sure that we don't crash
  28. // if the source file is a memory buffer.
  29. const char TestProgram[] =
  30. "class EmitCXXGlobalInitFunc "
  31. "{ "
  32. "public: "
  33. " EmitCXXGlobalInitFunc() {} "
  34. "}; "
  35. "EmitCXXGlobalInitFunc test; ";
  36. TEST(BufferSourceTest, EmitCXXGlobalInitFunc) {
  37. CompilerInstance compiler;
  38. compiler.createDiagnostics();
  39. compiler.getLangOpts().CPlusPlus = 1;
  40. compiler.getLangOpts().CPlusPlus11 = 1;
  41. compiler.getTargetOpts().Triple = llvm::Triple::normalize(
  42. llvm::sys::getProcessTriple());
  43. compiler.setTarget(clang::TargetInfo::CreateTargetInfo(
  44. compiler.getDiagnostics(),
  45. std::make_shared<clang::TargetOptions>(
  46. compiler.getTargetOpts())));
  47. compiler.createFileManager();
  48. compiler.createSourceManager(compiler.getFileManager());
  49. compiler.createPreprocessor(clang::TU_Prefix);
  50. compiler.createASTContext();
  51. compiler.setASTConsumer(std::unique_ptr<ASTConsumer>(
  52. CreateLLVMCodeGen(
  53. compiler.getDiagnostics(),
  54. "EmitCXXGlobalInitFuncTest",
  55. compiler.getHeaderSearchOpts(),
  56. compiler.getPreprocessorOpts(),
  57. compiler.getCodeGenOpts(),
  58. llvm::getGlobalContext())));
  59. compiler.createSema(clang::TU_Prefix,NULL);
  60. clang::SourceManager &sm = compiler.getSourceManager();
  61. sm.setMainFileID(sm.createFileID(
  62. llvm::MemoryBuffer::getMemBuffer(TestProgram), clang::SrcMgr::C_User));
  63. clang::ParseAST(compiler.getSema(), false, false);
  64. }
  65. }