aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Sema/SemaOverload.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 86181040ce..7ddb151e8a 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/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;
}