PR15067 (again): Don't warn about UCNs in C90 if we're raw-lexing.
authorJordan Rose <jordan_rose@apple.com>
Mon, 28 Jan 2013 17:49:02 +0000 (17:49 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 28 Jan 2013 17:49:02 +0000 (17:49 +0000)
Fixes a crash. Thanks, Richard.

llvm-svn: 173701

clang/lib/Lex/Lexer.cpp
clang/test/Lexer/c90.c

index 91c4f66..3e3aaae 100644 (file)
@@ -2710,7 +2710,8 @@ uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc,
     return 0;
 
   if (!LangOpts.CPlusPlus && !LangOpts.C99) {
-    Diag(SlashLoc, diag::warn_ucn_not_valid_in_c89);
+    if (Result && !isLexingRawMode())
+      Diag(SlashLoc, diag::warn_ucn_not_valid_in_c89);
     return 0;
   }
 
index 826d910..649173d 100644 (file)
@@ -41,3 +41,6 @@ int test4() {
 }
 
 #define MY_UCN \u00FC // expected-warning {{universal character names are only valid in C99 or C++; treating as '\' followed by identifier}}
+#define NOT_A_UCN \h // no-warning
+
+extern int idWithUCN\u00FC; // expected-warning {{universal character names are only valid in C99 or C++; treating as '\' followed by identifier}} expected-error {{expected ';'}}