diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
| commit | 9f4dbff6669c8037f3b036bcf580d14f1a4f12a5 (patch) | |
| tree | 47df2c12b57214af6c31e47404b005675b8b7ffc /unittests/Frontend | |
| parent | f73d5f23a889b93d89ddef61ac0995df40286bb8 (diff) | |
Notes
Diffstat (limited to 'unittests/Frontend')
| -rw-r--r-- | unittests/Frontend/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | unittests/Frontend/FrontendActionTest.cpp | 38 | ||||
| -rw-r--r-- | unittests/Frontend/Makefile | 2 |
3 files changed, 37 insertions, 10 deletions
diff --git a/unittests/Frontend/CMakeLists.txt b/unittests/Frontend/CMakeLists.txt index c65a1638a400..cdc955944bcf 100644 --- a/unittests/Frontend/CMakeLists.txt +++ b/unittests/Frontend/CMakeLists.txt @@ -1,14 +1,11 @@ set(LLVM_LINK_COMPONENTS - ${LLVM_TARGETS_TO_BUILD} - asmparser - bitreader - support - mc + Support ) add_clang_unittest(FrontendTests FrontendActionTest.cpp ) target_link_libraries(FrontendTests + clangAST clangFrontend ) diff --git a/unittests/Frontend/FrontendActionTest.cpp b/unittests/Frontend/FrontendActionTest.cpp index bcb340d66887..e39d00f6af3d 100644 --- a/unittests/Frontend/FrontendActionTest.cpp +++ b/unittests/Frontend/FrontendActionTest.cpp @@ -13,6 +13,7 @@ #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" +#include "clang/Lex/Preprocessor.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/MemoryBuffer.h" #include "gtest/gtest.h" @@ -24,8 +25,19 @@ namespace { class TestASTFrontendAction : public ASTFrontendAction { public: + TestASTFrontendAction(bool enableIncrementalProcessing = false) + : EnableIncrementalProcessing(enableIncrementalProcessing) { } + + bool EnableIncrementalProcessing; std::vector<std::string> decl_names; + virtual bool BeginSourceFileAction(CompilerInstance &ci, StringRef filename) { + if (EnableIncrementalProcessing) + ci.getPreprocessor().enableIncrementalProcessing(); + + return ASTFrontendAction::BeginSourceFileAction(ci, filename); + } + virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { return new Visitor(decl_names); @@ -64,10 +76,28 @@ TEST(ASTFrontendAction, Sanity) { TestASTFrontendAction test_action; ASSERT_TRUE(compiler.ExecuteAction(test_action)); - ASSERT_EQ(3U, test_action.decl_names.size()); - EXPECT_EQ("__builtin_va_list", test_action.decl_names[0]); - EXPECT_EQ("main", test_action.decl_names[1]); - EXPECT_EQ("x", test_action.decl_names[2]); + ASSERT_EQ(2U, test_action.decl_names.size()); + EXPECT_EQ("main", test_action.decl_names[0]); + EXPECT_EQ("x", test_action.decl_names[1]); +} + +TEST(ASTFrontendAction, IncrementalParsing) { + CompilerInvocation *invocation = new CompilerInvocation; + invocation->getPreprocessorOpts().addRemappedFile( + "test.cc", MemoryBuffer::getMemBuffer("int main() { float x; }")); + invocation->getFrontendOpts().Inputs.push_back(FrontendInputFile("test.cc", + IK_CXX)); + invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; + invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; + CompilerInstance compiler; + compiler.setInvocation(invocation); + compiler.createDiagnostics(); + + TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true); + ASSERT_TRUE(compiler.ExecuteAction(test_action)); + ASSERT_EQ(2U, test_action.decl_names.size()); + EXPECT_EQ("main", test_action.decl_names[0]); + EXPECT_EQ("x", test_action.decl_names[1]); } } // anonymous namespace diff --git a/unittests/Frontend/Makefile b/unittests/Frontend/Makefile index 7de9fb4778b4..a63ae1824534 100644 --- a/unittests/Frontend/Makefile +++ b/unittests/Frontend/Makefile @@ -14,7 +14,7 @@ LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \ clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \ clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \ - clangARCMigrate.a clangRewriteCore.a \ + clangARCMigrate.a clangRewrite.a \ clangRewriteFrontend.a clangEdit.a \ clangAnalysis.a clangAST.a clangLex.a clangBasic.a |
