diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-03-29 17:35:02 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-03-29 17:35:02 +0000 |
commit | 0c18d03d9157090cb379219a8b91f3104869f358 (patch) | |
tree | 4691c44c47d7b0f79928619e73b170efb9047c65 /clang/test/Sema/format-strings.c | |
parent | ac400900da8e0f756a73739a85151b01e42500ea (diff) | |
download | bcm5719-llvm-0c18d03d9157090cb379219a8b91f3104869f358.tar.gz bcm5719-llvm-0c18d03d9157090cb379219a8b91f3104869f358.zip |
[Sema] Handle UTF-8 invalid format string specifiers
Improve invalid format string specifier handling by printing out
invalid specifiers characters with \x, \u and \U. Previously clang
would print gargabe whenever the character is unprintable.
Example, before:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier ' [-Wformat-invalid-specifier]
after:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier '\u25b9' [-Wformat-invalid-specifier]
Differential Revision: http://reviews.llvm.org/D18296
rdar://problem/24672159
llvm-svn: 264752
Diffstat (limited to 'clang/test/Sema/format-strings.c')
-rw-r--r-- | clang/test/Sema/format-strings.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c index 5559710c603..253aa57becd 100644 --- a/clang/test/Sema/format-strings.c +++ b/clang/test/Sema/format-strings.c @@ -642,6 +642,14 @@ void test_qualifiers(volatile int *vip, const int *cip, printf("%n", (cip_t)0); // expected-warning{{format specifies type 'int *' but the argument has type 'cip_t' (aka 'const int *')}} } +void testInvalidNoPrintable() { + printf("%\u25B9"); // expected-warning {{invalid conversion specifier '\u25b9'}} + printf("%\xE2\x96\xB9"); // expected-warning {{invalid conversion specifier '\u25b9'}} + printf("%\U00010348"); // expected-warning {{invalid conversion specifier '\U00010348'}} + printf("%\xF0\x90\x8D\x88"); // expected-warning {{invalid conversion specifier '\U00010348'}} + printf("%\xe2"); // expected-warning {{invalid conversion specifier '\xe2'}} +} + #pragma GCC diagnostic ignored "-Wformat-nonliteral" #pragma GCC diagnostic warning "-Wformat-security" // <rdar://problem/14178260> |