r195564 - [Parser] Unbreak parsing with incremental parsing enabled and add a unit-test for it.

Argyrios Kyrtzidis akyrtzi at gmail.com
Sat Nov 23 18:12:19 PST 2013


Author: akirtzidis
Date: Sat Nov 23 20:12:18 2013
New Revision: 195564

URL: http://llvm.org/viewvc/llvm-project?rev=195564&view=rev
Log:
[Parser] Unbreak parsing with incremental parsing enabled and add a unit-test for it.

Modified:
    cfe/trunk/lib/Parse/Parser.cpp
    cfe/trunk/unittests/Frontend/FrontendActionTest.cpp

Modified: cfe/trunk/lib/Parse/Parser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=195564&r1=195563&r2=195564&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/Parser.cpp (original)
+++ cfe/trunk/lib/Parse/Parser.cpp Sat Nov 23 20:12:18 2013
@@ -584,10 +584,8 @@ bool Parser::ParseTopLevelDecl(DeclGroup
 
   // Skip over the EOF token, flagging end of previous input for incremental
   // processing
-  if (PP.isIncrementalProcessingEnabled() && Tok.is(tok::eof)) {
+  if (PP.isIncrementalProcessingEnabled() && Tok.is(tok::eof))
     ConsumeToken();
-    return false;
-  }
 
   Result = DeclGroupPtrTy();
   switch (Tok.getKind()) {

Modified: cfe/trunk/unittests/Frontend/FrontendActionTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Frontend/FrontendActionTest.cpp?rev=195564&r1=195563&r2=195564&view=diff
==============================================================================
--- cfe/trunk/unittests/Frontend/FrontendActionTest.cpp (original)
+++ cfe/trunk/unittests/Frontend/FrontendActionTest.cpp Sat Nov 23 20:12:18 2013
@@ -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);
@@ -66,6 +78,26 @@ TEST(ASTFrontendAction, Sanity) {
   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]);
+}
+
+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]);
 }





More information about the cfe-commits mailing list