summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/FormatString.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2011-12-02 19:22:15 +0000
committerHans Wennborg <hans@hanshq.net>2011-12-02 19:22:15 +0000
commit70f7213d2cf81b2dba91ec939e44f07c975e684e (patch)
treee5a5631a3e31b83df77f4b04bce499b8fd49fce6 /clang/lib/Analysis/FormatString.cpp
parent541392832f742f9a79bb0179d515a79924b2c71a (diff)
downloadbcm5719-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.cpp25
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;
}
-
-
OpenPOWER on IntegriCloud