From: Eli Friedman Date: Wed, 10 Jun 2009 01:32:39 +0000 (+0000) Subject: PR4353: Add support for \E as a character escape. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3c54801fbc67d8df2fed0711a2e2022db6b1bbcf;p=clang PR4353: Add support for \E as a character escape. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73153 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/LiteralSupport.cpp b/lib/Lex/LiteralSupport.cpp index 4d10974df2..37ea52b46f 100644 --- a/lib/Lex/LiteralSupport.cpp +++ b/lib/Lex/LiteralSupport.cpp @@ -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 index 0000000000..ef665fe84a --- /dev/null +++ b/test/Lexer/char-escapes.c @@ -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}}