From: Hans Wennborg Date: Tue, 8 May 2012 17:21:31 +0000 (+0000) Subject: Make -Wformat accept printf("%hhx", c); with -funsigned-char X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=101d4e0c8ffbcdaaa58cddf1c20f98aa1b4501c4;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156388 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/FormatString.cpp b/lib/Analysis/FormatString.cpp index ab69c06911..f776c89cc5 100644 --- a/lib/Analysis/FormatString.cpp +++ b/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/test/Sema/format-strings.c b/test/Sema/format-strings.c index 5d8e4cbb87..1f9acd4ef8 100644 --- a/test/Sema/format-strings.c +++ b/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 @@ -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); +}