From 6f688e131e125ffce23a63a9d286578a454cc4e0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 10 Oct 2007 20:45:16 +0000 Subject: [PATCH] clang -E should not print tokens from the predefines buffer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42838 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/PrintPreprocessedOutput.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Driver/PrintPreprocessedOutput.cpp b/Driver/PrintPreprocessedOutput.cpp index aed26cfd58..a3db2b0997 100644 --- a/Driver/PrintPreprocessedOutput.cpp +++ b/Driver/PrintPreprocessedOutput.cpp @@ -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()), "")); + + 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(); -- 2.40.0