[cfe-dev] Preprocessor tweak

Neil Booth neil at daikokuya.co.uk
Tue Jul 17 23:28:49 PDT 2007


This fixes a minor issue where searching for the '(' to begin
a macro invocation would spill into the surrounding file.

Neil.

Index: Lex/Preprocessor.cpp
===================================================================
--- Lex/Preprocessor.cpp	(revision 39996)
+++ Lex/Preprocessor.cpp	(working copy)
@@ -552,14 +552,17 @@
     Val = CurLexer->isNextPPTokenLParen();
   else
     Val = CurMacroExpander->isNextTokenLParen();
-  
+
   if (Val == 2) {
-    // If we ran off the end of the lexer or macro expander, walk the include
-    // stack, looking for whatever will return the next token.
+    // We have run off the end.  If it's a source file we don't
+    // examine enclosing ones (C99 5.1.1.2p4).  Otherwise walk up the
+    // macro stack.
+    if (CurLexer)
+      return false;
     for (unsigned i = IncludeMacroStack.size(); Val == 2 && i != 0; --i) {
       IncludeStackInfo &Entry = IncludeMacroStack[i-1];
       if (Entry.TheLexer)
-        Val = Entry.TheLexer->isNextPPTokenLParen();
+	return false;
       else
         Val = Entry.TheMacroExpander->isNextTokenLParen();
     }



More information about the cfe-dev mailing list