]> granicus.if.org Git - clang/commitdiff
Fix r173881 to properly skip invalid UTF-8 characters in raw lexing and -E.
authorJordan Rose <jordan_rose@apple.com>
Wed, 30 Jan 2013 19:21:12 +0000 (19:21 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 30 Jan 2013 19:21:12 +0000 (19:21 +0000)
This caused hangs as we processed the same invalid byte over and over.

<rdar://problem/13115651>

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

lib/Lex/Lexer.cpp
test/Lexer/utf8-invalid.c

index 6a918d6a3ad3d4aab65fc0f1017f4d38d1545e5e..4b5a3135c363cf342ce2e904d8367a0d6f1a78bc 100644 (file)
@@ -3538,6 +3538,7 @@ LexNextToken:
       return LexUnicode(Result, CodePoint, CurPtr);
     
     if (isLexingRawMode() || PP->isPreprocessedOutput()) {
+      ++CurPtr;
       Kind = tok::unknown;
       break;
     }
index c4dd318e786acb5e993fe250a4df5ed150bc4218..f9d2b59a6bdc576b1dc03c6e96e18c586a7cdbda 100644 (file)
@@ -1,6 +1,12 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -E %s -o /dev/null
 
 // Note: this file contains invalid UTF-8 before the variable name in the
 // next line. Please do not fix!
 
 extern int \82x; // expected-error{{source file is not valid UTF-8}}
+
+#if 0
+// Don't warn about bad UTF-8 in raw lexing mode.
+extern int \82x;
+#endif