Index: include/clang/Frontend/VerifyDiagnosticConsumer.h
===================================================================
--- include/clang/Frontend/VerifyDiagnosticConsumer.h	(revision 167642)
+++ include/clang/Frontend/VerifyDiagnosticConsumer.h	(working copy)
@@ -250,7 +250,7 @@
   /// \brief Update lists of parsed and unparsed files.
   void UpdateParsedFileStatus(SourceManager &SM, FileID FID, ParsedStatus PS);
 
-  virtual bool HandleComment(Preprocessor &PP, SourceRange Comment);
+  virtual void HandleComment(Preprocessor &PP, SourceRange Comment);
 
   virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
                                 const Diagnostic &Info);
Index: include/clang/Lex/Preprocessor.h
===================================================================
--- include/clang/Lex/Preprocessor.h	(revision 167692)
+++ include/clang/Lex/Preprocessor.h	(working copy)
@@ -1392,11 +1392,8 @@
   void HandlePragmaPopMacro(Token &Tok);
   void HandlePragmaIncludeAlias(Token &Tok);
   IdentifierInfo *ParsePragmaPushOrPopMacro(Token &Tok);
+  void HandleComment(Token &Token, SourceRange Comment);
 
-  // Return true and store the first token only if any CommentHandler
-  // has inserted some tokens and getCommentRetentionState() is false.
-  bool HandleComment(Token &Token, SourceRange Comment);
-
   /// \brief A macro is used, update information about macros that need unused
   /// warnings.
   void markMacroAsUsed(MacroInfo *MI);
@@ -1410,7 +1407,7 @@
 
   // The handler shall return true if it has pushed any tokens
   // to be read using e.g. EnterToken or EnterTokenStream.
-  virtual bool HandleComment(Preprocessor &PP, SourceRange Comment) = 0;
+  virtual void HandleComment(Preprocessor &PP, SourceRange Comment) = 0;
 };
 
 }  // end namespace clang
Index: unittests/Tooling/CommentHandlerTest.cpp
===================================================================
--- unittests/Tooling/CommentHandlerTest.cpp	(revision 167642)
+++ unittests/Tooling/CommentHandlerTest.cpp	(working copy)
@@ -34,7 +34,7 @@
     EXPECT_TRUE(Verified) << "CommentVerifier not accessed";
   }
 
-  virtual bool HandleComment(Preprocessor &PP, SourceRange Loc) {
+  virtual void HandleComment(Preprocessor &PP, SourceRange Loc) {
     assert(&PP == this->PP && "Preprocessor changed!");
 
     SourceLocation Start = Loc.getBegin();
@@ -50,7 +50,6 @@
     EXPECT_TRUE(!Invalid) << "Invalid column number on comment " << C;
 
     Comments.push_back(Comment(C, CLine, CCol));
-    return false;
   }
 
   CommentVerifier GetVerifier();
Index: lib/Frontend/VerifyDiagnosticConsumer.cpp
===================================================================
--- lib/Frontend/VerifyDiagnosticConsumer.cpp	(revision 167642)
+++ lib/Frontend/VerifyDiagnosticConsumer.cpp	(working copy)
@@ -451,7 +451,7 @@
 
 /// HandleComment - Hook into the preprocessor and extract comments containing
 ///  expected errors and warnings.
-bool VerifyDiagnosticConsumer::HandleComment(Preprocessor &PP,
+void VerifyDiagnosticConsumer::HandleComment(Preprocessor &PP,
                                              SourceRange Comment) {
   SourceManager &SM = PP.getSourceManager();
   SourceLocation CommentBegin = Comment.getBegin();
@@ -460,13 +460,13 @@
   StringRef C(CommentRaw, SM.getCharacterData(Comment.getEnd()) - CommentRaw);
 
   if (C.empty())
-    return false;
+    return;
 
   // Fold any "\<EOL>" sequences
   size_t loc = C.find('\\');
   if (loc == StringRef::npos) {
     ParseDirective(C, &ED, SM, CommentBegin, PP.getDiagnostics(), Status);
-    return false;
+    return;
   }
 
   std::string C2;
@@ -496,7 +496,6 @@
 
   if (!C2.empty())
     ParseDirective(C2, &ED, SM, CommentBegin, PP.getDiagnostics(), Status);
-  return false;
 }
 
 #ifndef NDEBUG
Index: lib/Lex/Lexer.cpp
===================================================================
--- lib/Lex/Lexer.cpp	(revision 167690)
+++ lib/Lex/Lexer.cpp	(working copy)
@@ -1996,11 +1996,9 @@
 
   // Found but did not consume the newline.  Notify comment handlers about the
   // comment unless we're in a #if 0 block.
-  if (PP && !isLexingRawMode() &&
-      PP->HandleComment(Result, SourceRange(getSourceLocation(BufferPtr),
-                                            getSourceLocation(CurPtr)))) {
-    BufferPtr = CurPtr;
-    return true; // A token has to be returned.
+  if (PP && !isLexingRawMode()) {
+    PP->HandleComment(Result, SourceRange(getSourceLocation(BufferPtr),
+                                          getSourceLocation(CurPtr)));
   }
 
   // If we are returning comments as tokens, return this comment as a token.
@@ -2266,11 +2264,9 @@
   }
 
   // Notify comment handlers about the comment unless we're in a #if 0 block.
-  if (PP && !isLexingRawMode() &&
-      PP->HandleComment(Result, SourceRange(getSourceLocation(BufferPtr),
-                                            getSourceLocation(CurPtr)))) {
-    BufferPtr = CurPtr;
-    return true; // A token has to be returned.
+  if (PP && !isLexingRawMode()) {
+    PP->HandleComment(Result, SourceRange(getSourceLocation(BufferPtr),
+                                          getSourceLocation(CurPtr)));
   }
 
   // If we are returning comments as tokens, return this comment as a token.
Index: lib/Lex/Preprocessor.cpp
===================================================================
--- lib/Lex/Preprocessor.cpp	(revision 167642)
+++ lib/Lex/Preprocessor.cpp	(working copy)
@@ -703,18 +703,12 @@
   CommentHandlers.erase(Pos);
 }
 
-bool Preprocessor::HandleComment(Token &result, SourceRange Comment) {
-  bool AnyPendingTokens = false;
+void Preprocessor::HandleComment(Token &result, SourceRange Comment) {
   for (std::vector<CommentHandler *>::iterator H = CommentHandlers.begin(),
        HEnd = CommentHandlers.end();
        H != HEnd; ++H) {
-    if ((*H)->HandleComment(*this, Comment))
-      AnyPendingTokens = true;
+    (*H)->HandleComment(*this, Comment);
   }
-  if (!AnyPendingTokens || getCommentRetentionState())
-    return false;
-  Lex(result);
-  return true;
 }
 
 ModuleLoader::~ModuleLoader() { }
Index: lib/Parse/Parser.cpp
===================================================================
--- lib/Parse/Parser.cpp	(revision 167642)
+++ lib/Parse/Parser.cpp	(working copy)
@@ -33,9 +33,8 @@
 public:
   explicit ActionCommentHandler(Sema &S) : S(S) { }
 
-  virtual bool HandleComment(Preprocessor &PP, SourceRange Comment) {
+  virtual void HandleComment(Preprocessor &PP, SourceRange Comment) {
     S.ActOnComment(Comment);
-    return false;
   }
 };
 } // end anonymous namespace
