r313014 - Fix recording preamble's conditional stack in skipped PP branches.

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 12 01:35:58 PDT 2017


Author: ibiryukov
Date: Tue Sep 12 01:35:57 2017
New Revision: 313014

URL: http://llvm.org/viewvc/llvm-project?rev=313014&view=rev
Log:
Fix recording preamble's conditional stack in skipped PP branches.

Summary:
This fixes PR34547.
`Lexer::LexEndOfFile` handles recording of ConditionalStack for
preamble and reporting errors about unmatched conditionalal PP
directives.
However, SkipExcludedConditionalBlock contianed duplicated logic for
reporting errors and clearing ConditionalStack, but not for preamble
recording.

This fix removes error reporting logic from
`SkipExcludedConditionalBlock`, unmatched PP conditionals are now
reported inside `Lexer::LexEndOfFile`.

Reviewers: erikjv, klimek, bkramer

Reviewed By: erikjv

Subscribers: nik, cfe-commits

Differential Revision: https://reviews.llvm.org/D37700

Added:
    cfe/trunk/test/Index/preamble-conditionals-inverted-with-error.cpp
    cfe/trunk/test/Index/preamble-conditionals-inverted.cpp
Modified:
    cfe/trunk/lib/Lex/PPDirectives.cpp

Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=313014&r1=313013&r2=313014&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Tue Sep 12 01:35:57 2017
@@ -383,15 +383,8 @@ void Preprocessor::SkipExcludedCondition
 
     // If this is the end of the buffer, we have an error.
     if (Tok.is(tok::eof)) {
-      // Emit errors for each unterminated conditional on the stack, including
-      // the current one.
-      while (!CurPPLexer->ConditionalStack.empty()) {
-        if (CurLexer->getFileLoc() != CodeCompletionFileLoc)
-          Diag(CurPPLexer->ConditionalStack.back().IfLoc,
-               diag::err_pp_unterminated_conditional);
-        CurPPLexer->ConditionalStack.pop_back();
-      }
-
+      // We don't emit errors for unterminated conditionals here,
+      // Lexer::LexEndOfFile can do that propertly.
       // Just return and let the caller lex after this #include.
       break;
     }

Added: cfe/trunk/test/Index/preamble-conditionals-inverted-with-error.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/preamble-conditionals-inverted-with-error.cpp?rev=313014&view=auto
==============================================================================
--- cfe/trunk/test/Index/preamble-conditionals-inverted-with-error.cpp (added)
+++ cfe/trunk/test/Index/preamble-conditionals-inverted-with-error.cpp Tue Sep 12 01:35:57 2017
@@ -0,0 +1,8 @@
+// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 \
+// RUN:                                       local -std=c++14 %s 2>&1 \
+// RUN: | FileCheck %s
+#ifdef FOO_H
+
+void foo();
+
+// CHECK: preamble-conditionals-inverted-with-error.cpp:4:2: error: unterminated conditional directive

Added: cfe/trunk/test/Index/preamble-conditionals-inverted.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/preamble-conditionals-inverted.cpp?rev=313014&view=auto
==============================================================================
--- cfe/trunk/test/Index/preamble-conditionals-inverted.cpp (added)
+++ cfe/trunk/test/Index/preamble-conditionals-inverted.cpp Tue Sep 12 01:35:57 2017
@@ -0,0 +1,8 @@
+// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 \
+// RUN:                                       local -std=c++14 %s 2>&1 \
+// RUN: | FileCheck %s --implicit-check-not "error:"
+#ifdef FOO_H
+
+void foo();
+
+#endif




More information about the cfe-commits mailing list