]> granicus.if.org Git - clang/commitdiff
When in keep whitespace mode, make sure to return block comments that are
authorChris Lattner <sabre@nondot.org>
Sun, 12 Oct 2008 04:19:49 +0000 (04:19 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 12 Oct 2008 04:19:49 +0000 (04:19 +0000)
unterminated.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57403 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/Lexer.cpp

index f112aad6d374e86e997d46bb88fa75ec3192f068..838addedfb29220c1fac1c1c2044e57901622e40 100644 (file)
@@ -956,7 +956,17 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
   if (C == 0 && CurPtr == BufferEnd+1) {
     if (!LexingRawMode)
       Diag(BufferPtr, diag::err_unterminated_block_comment);
-    BufferPtr = CurPtr-1;
+    --CurPtr;
+    
+    // KeepWhitespaceMode should return this broken comment as a token.  Since
+    // it isn't a well formed comment, just return it as an 'unknown' token.
+    if (isKeepWhitespaceMode()) {
+      Result.setKind(tok::unknown);
+      FormTokenWithChars(Result, CurPtr);
+      return true;
+    }
+    
+    BufferPtr = CurPtr;
     return false;
   }
   
@@ -1031,7 +1041,17 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
       // Note: the user probably forgot a */.  We could continue immediately
       // after the /*, but this would involve lexing a lot of what really is the
       // comment, which surely would confuse the parser.
-      BufferPtr = CurPtr-1;
+      --CurPtr;
+      
+      // KeepWhitespaceMode should return this broken comment as a token.  Since
+      // it isn't a well formed comment, just return it as an 'unknown' token.
+      if (isKeepWhitespaceMode()) {
+        Result.setKind(tok::unknown);
+        FormTokenWithChars(Result, CurPtr);
+        return true;
+      }
+      
+      BufferPtr = CurPtr;
       return false;
     }
     C = *CurPtr++;