diff options
author | Richard Trieu <rtrieu@google.com> | 2011-12-13 23:19:45 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2011-12-13 23:19:45 +0000 |
commit | 96ed5b6b47666190c6f908292e5c0b187c41047a (patch) | |
tree | 79a3fa5d01a5f643346af0dbabfa80d765f5b489 /clang/lib | |
parent | bc96f3725322e7fbf28b2d8814ca8f2cea0cd6f4 (diff) | |
download | bcm5719-llvm-96ed5b6b47666190c6f908292e5c0b187c41047a.tar.gz bcm5719-llvm-96ed5b6b47666190c6f908292e5c0b187c41047a.zip |
Make the diagnostic message more consistant. Update the type comparison to
handle non-pointer types. This is for the extra info printed when function
types are compared.
llvm-svn: 146525
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 86181040cec..7ddb151e8a5 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -2177,6 +2177,12 @@ enum { /// parameter types, and different return types. void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, QualType FromType, QualType ToType) { + // If either type is not valid, include no extra info. + if (FromType.isNull() || ToType.isNull()) { + PDiag << ft_default; + return; + } + // Get the function type from the pointers. if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) { const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(), @@ -2188,27 +2194,26 @@ void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, } FromType = FromMember->getPointeeType(); ToType = ToMember->getPointeeType(); - } else if (FromType->isPointerType() && ToType->isPointerType()) { + } + + if (FromType->isPointerType()) FromType = FromType->getPointeeType(); + if (ToType->isPointerType()) ToType = ToType->getPointeeType(); - } else { - PDiag << ft_default; - return; - } + // Remove references. FromType = FromType.getNonReferenceType(); ToType = ToType.getNonReferenceType(); - // If either type is not valid, of the types are the same, no extra info. - if (FromType.isNull() || ToType.isNull() || - Context.hasSameType(FromType, ToType)) { + // Don't print extra info for non-specialized template functions. + if (FromType->isInstantiationDependentType() && + !FromType->getAs<TemplateSpecializationType>()) { PDiag << ft_default; return; } - // Don't print extra info for non-specialized template functions. - if (FromType->isInstantiationDependentType() && - !FromType->getAs<TemplateSpecializationType>()) { + // No extra info for same types. + if (Context.hasSameType(FromType, ToType)) { PDiag << ft_default; return; } |