diff options
author | Hans Wennborg <hans@hanshq.net> | 2011-12-02 19:22:15 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2011-12-02 19:22:15 +0000 |
commit | 70f7213d2cf81b2dba91ec939e44f07c975e684e (patch) | |
tree | e5a5631a3e31b83df77f4b04bce499b8fd49fce6 /clang/lib/Analysis/FormatString.cpp | |
parent | 541392832f742f9a79bb0179d515a79924b2c71a (diff) | |
download | bcm5719-llvm-70f7213d2cf81b2dba91ec939e44f07c975e684e.tar.gz bcm5719-llvm-70f7213d2cf81b2dba91ec939e44f07c975e684e.zip |
Make conversion specifier warning refer to typedef if possible.
For example, the warning for printf("%zu", 42.0);
changes from "conversion specifies type 'unsigned long'" to "conversion
specifies type 'size_t' (aka 'unsigned long')"
llvm-svn: 145697
Diffstat (limited to 'clang/lib/Analysis/FormatString.cpp')
-rw-r--r-- | clang/lib/Analysis/FormatString.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/clang/lib/Analysis/FormatString.cpp b/clang/lib/Analysis/FormatString.cpp index 6498ded4e37..0171bb7aec3 100644 --- a/clang/lib/Analysis/FormatString.cpp +++ b/clang/lib/Analysis/FormatString.cpp @@ -230,7 +230,8 @@ bool ArgTypeResult::matchesType(ASTContext &C, QualType argTy) const { case SpecificTy: { argTy = C.getCanonicalType(argTy).getUnqualifiedType(); - if (T == argTy) + QualType U = C.getCanonicalType(T); + if (U == argTy) return true; // Check for "compatible types". if (const BuiltinType *BT = argTy->getAs<BuiltinType>()) @@ -239,26 +240,26 @@ bool ArgTypeResult::matchesType(ASTContext &C, QualType argTy) const { break; case BuiltinType::Char_S: case BuiltinType::SChar: - return T == C.UnsignedCharTy; + return U == C.UnsignedCharTy; case BuiltinType::Char_U: case BuiltinType::UChar: - return T == C.SignedCharTy; + return U == C.SignedCharTy; case BuiltinType::Short: - return T == C.UnsignedShortTy; + return U == C.UnsignedShortTy; case BuiltinType::UShort: - return T == C.ShortTy; + return U == C.ShortTy; case BuiltinType::Int: - return T == C.UnsignedIntTy; + return U == C.UnsignedIntTy; case BuiltinType::UInt: - return T == C.IntTy; + return U == C.IntTy; case BuiltinType::Long: - return T == C.UnsignedLongTy; + return U == C.UnsignedLongTy; case BuiltinType::ULong: - return T == C.LongTy; + return U == C.LongTy; case BuiltinType::LongLong: - return T == C.UnsignedLongLongTy; + return U == C.UnsignedLongLongTy; case BuiltinType::ULongLong: - return T == C.LongLongTy; + return U == C.LongLongTy; } return false; } @@ -485,5 +486,3 @@ bool FormatSpecifier::hasValidLengthModifier() const { } return false; } - - |