]> granicus.if.org Git - clang/commitdiff
PR4353: Add support for \E as a character escape.
authorEli Friedman <eli.friedman@gmail.com>
Wed, 10 Jun 2009 01:32:39 +0000 (01:32 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 10 Jun 2009 01:32:39 +0000 (01:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73153 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/LiteralSupport.cpp
test/Lexer/char-escapes.c [new file with mode: 0644]

index 4d10974df2c678ab66f7f2227f02af7bca383bfe..37ea52b46f9d82af3e16bc86ec586e4fcb4f9320 100644 (file)
@@ -56,6 +56,10 @@ static unsigned ProcessCharEscape(const char *&ThisTokBuf,
     PP.Diag(Loc, diag::ext_nonstandard_escape) << "e";
     ResultChar = 27;
     break;
+  case 'E':
+    PP.Diag(Loc, diag::ext_nonstandard_escape) << "E";
+    ResultChar = 27;
+    break;
   case 'f':
     ResultChar = 12;
     break;
@@ -135,7 +139,6 @@ static unsigned ProcessCharEscape(const char *&ThisTokBuf,
     PP.Diag(Loc, diag::ext_nonstandard_escape)
       << std::string()+(char)ResultChar;
     break;
-    // FALL THROUGH.
   default:
     if (isgraph(ThisTokBuf[0]))
       PP.Diag(Loc, diag::ext_unknown_escape) << std::string()+(char)ResultChar;
diff --git a/test/Lexer/char-escapes.c b/test/Lexer/char-escapes.c
new file mode 100644 (file)
index 0000000..ef665fe
--- /dev/null
@@ -0,0 +1,21 @@
+// RUN: clang-cc -fsyntax-only -pedantic -verify %s
+
+int test['\\' == 92 ? 1 : -1];
+int test['\"' == 34 ? 1 : -1];
+int test['\'' == 39 ? 1 : -1];
+int test['\?' == 63 ? 1 : -1];
+int test['\a' == 7 ? 1 : -1];
+int test['\b' == 8 ? 1 : -1];
+int test['\e' == 27 ? 1 : -1]; // expected-warning {{non-standard escape}}
+int test['\E' == 27 ? 1 : -1]; // expected-warning {{non-standard escape}}
+int test['\f' == 12 ? 1 : -1];
+int test['\n' == 10 ? 1 : -1];
+int test['\r' == 13 ? 1 : -1];
+int test['\t' == 9 ? 1 : -1];
+int test['\v' == 11 ? 1 : -1];
+int test['\xa' == 10 ? 1 : -1];
+int test['\1' == 1 ? 1 : -1];
+int test['\(' == 40 ? 1 : -1]; // expected-warning {{non-standard escape}}
+int test['\{' == 123 ? 1 : -1]; // expected-warning {{non-standard escape}}
+int test['\[' == 91 ? 1 : -1]; // expected-warning {{non-standard escape}}
+int test['\%' == 37 ? 1 : -1]; // expected-warning {{non-standard escape}}