diff options
| author | Hans Wennborg <hans@hanshq.net> | 2012-05-08 17:21:31 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2012-05-08 17:21:31 +0000 |
| commit | 967b9cec23dc8723bd417685ab2cbcb72d533067 (patch) | |
| tree | fcffe9fe0eb23a416c26e76fbc28cacd172b9703 | |
| parent | 24ac479a7d0e583bb39295baf494f49cc9f1dac3 (diff) | |
| download | bcm5719-llvm-967b9cec23dc8723bd417685ab2cbcb72d533067.tar.gz bcm5719-llvm-967b9cec23dc8723bd417685ab2cbcb72d533067.zip | |
Make -Wformat accept printf("%hhx", c); with -funsigned-char
For "%hhx", printf expects an unsigned char. This makes Clang
accept a 'char' argument for that also when using -funsigned-char.
This fixes PR12761.
llvm-svn: 156388
| -rw-r--r-- | clang/lib/Analysis/FormatString.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Sema/format-strings.c | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Analysis/FormatString.cpp b/clang/lib/Analysis/FormatString.cpp index ab69c069114..f776c89cc56 100644 --- a/clang/lib/Analysis/FormatString.cpp +++ b/clang/lib/Analysis/FormatString.cpp @@ -265,10 +265,9 @@ bool ArgTypeResult::matchesType(ASTContext &C, QualType argTy) const { break; case BuiltinType::Char_S: case BuiltinType::SChar: - return T == C.UnsignedCharTy; case BuiltinType::Char_U: case BuiltinType::UChar: - return T == C.SignedCharTy; + return T == C.UnsignedCharTy || T == C.SignedCharTy; case BuiltinType::Short: return T == C.UnsignedShortTy; case BuiltinType::UShort: diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c index 5d8e4cbb874..1f9acd4ef81 100644 --- a/clang/test/Sema/format-strings.c +++ b/clang/test/Sema/format-strings.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -verify -Wformat-nonliteral -isystem %S/Inputs %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wformat-nonliteral -isystem %S/Inputs -fno-signed-char %s #define __need_wint_t #include <stdarg.h> @@ -530,3 +531,8 @@ void test_other_formats() { void test_unused_system_args(int x) { PRINT1("%d\n", x); // no-warning{{extra argument is system header is OK}} } + +void pr12761(char c) { + // This should not warn even with -fno-signed-char. + printf("%hhx", c); +} |

