diff options
-rw-r--r-- | lib/Lex/LiteralSupport.cpp | 5 | ||||
-rw-r--r-- | test/Lexer/char-escapes.c | 21 |
2 files changed, 25 insertions, 1 deletions
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}} |