]> granicus.if.org Git - clang/commitdiff
clang -E should not print tokens from the predefines buffer.
authorChris Lattner <sabre@nondot.org>
Wed, 10 Oct 2007 20:45:16 +0000 (20:45 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 10 Oct 2007 20:45:16 +0000 (20:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42838 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/PrintPreprocessedOutput.cpp

index aed26cfd588a16e4088cc72bb7c0d1d2ef985484..a3db2b0997710c1598e81fd586a610e76ffdd1cf 100644 (file)
@@ -535,10 +535,16 @@ void clang::DoPrintPreprocessedInput(unsigned MainFileID, Preprocessor &PP,
   
   // Start parsing the specified input file.
   PP.EnterMainSourceFile(MainFileID);
-  
-  do {
-    PrevTok = Tok;
-    PP.Lex(Tok);
+
+  // Consume all of the tokens that come from the predefines buffer.  Those
+  // should not be emitted into the output and are guaranteed to be at the
+  // start.
+  const SourceManager &SourceMgr = PP.getSourceManager();
+  do PP.Lex(Tok);
+  while (Tok.isNot(tok::eof) && 
+         !strcmp(SourceMgr.getSourceName(Tok.getLocation()), "<predefines>"));
+
+  while (1) {
     
     // If this token is at the start of a line, emit newlines if needed.
     if (Tok.isAtStartOfLine()) {
@@ -565,7 +571,12 @@ void clang::DoPrintPreprocessedInput(unsigned MainFileID, Preprocessor &PP,
       OutputString(&S[0], S.size());
     }
     Callbacks->SetEmittedTokensOnThisLine();
-  } while (Tok.isNot(tok::eof));
+    
+    if (Tok.is(tok::eof)) break;
+   
+    PrevTok = Tok;
+    PP.Lex(Tok);
+  }
   OutputChar('\n');
   
   CleanupOutputBuffer();