diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-11-24 02:12:18 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-11-24 02:12:18 +0000 |
commit | 336fcd9c61e4cf845860d21ed12d631901b59581 (patch) | |
tree | 2ad686c3e31b374d35355352025dc0e78f8f86e9 /clang/unittests/Frontend/FrontendActionTest.cpp | |
parent | aa61cbbe8beaaac3a5c69a772a8e08f63092a43c (diff) | |
download | bcm5719-llvm-336fcd9c61e4cf845860d21ed12d631901b59581.tar.gz bcm5719-llvm-336fcd9c61e4cf845860d21ed12d631901b59581.zip |
[Parser] Unbreak parsing with incremental parsing enabled and add a unit-test for it.
llvm-svn: 195564
Diffstat (limited to 'clang/unittests/Frontend/FrontendActionTest.cpp')
-rw-r--r-- | clang/unittests/Frontend/FrontendActionTest.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang/unittests/Frontend/FrontendActionTest.cpp b/clang/unittests/Frontend/FrontendActionTest.cpp index bcb340d6688..1871a2f567f 100644 --- a/clang/unittests/Frontend/FrontendActionTest.cpp +++ b/clang/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); @@ -70,4 +82,24 @@ TEST(ASTFrontendAction, Sanity) { EXPECT_EQ("x", test_action.decl_names[2]); } +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(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]); +} + } // anonymous namespace |