From: Hans Wennborg Date: Tue, 31 Jan 2012 14:59:59 +0000 (+0000) Subject: Format string warnings: don't a.k.a. wchar_t with wchar_t. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7da1f4679332277614b6c583df66c3bfd94ded66;p=clang Format string warnings: don't a.k.a. wchar_t with wchar_t. This fixes the case where Clang would output: error: format specifies type 'wchar_t *' (aka 'wchar_t *') ArgTypeResult::getRepresentativeTypeName needs to take into account that wchar_t can be a built-in type (as opposed to in C, where it is a typedef). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149387 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/FormatString.cpp b/lib/Analysis/FormatString.cpp index a0633c80d3..30bfe4bf88 100644 --- a/lib/Analysis/FormatString.cpp +++ b/lib/Analysis/FormatString.cpp @@ -373,7 +373,7 @@ QualType ArgTypeResult::getRepresentativeType(ASTContext &C) const { std::string ArgTypeResult::getRepresentativeTypeName(ASTContext &C) const { std::string S = getRepresentativeType(C).getAsString(); - if (Name) + if (Name && S != Name) return std::string("'") + Name + "' (aka '" + S + "')"; return std::string("'") + S + "'"; } diff --git a/test/SemaCXX/format-strings.cpp b/test/SemaCXX/format-strings.cpp index 2011a71b48..4f5b74d170 100644 --- a/test/SemaCXX/format-strings.cpp +++ b/test/SemaCXX/format-strings.cpp @@ -13,3 +13,7 @@ void f(char **sp, float *fp) { printf("%a", 1.0); scanf("%afoobar", fp); } + +void g() { + printf("%ls", "foo"); // expected-warning{{format specifies type 'wchar_t *' but the argument has type 'const char *'}} +}