diff options
Diffstat (limited to 'clang/lib/Sema/SemaCXXCast.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaCXXCast.cpp | 18 | 
1 files changed, 10 insertions, 8 deletions
| diff --git a/clang/lib/Sema/SemaCXXCast.cpp b/clang/lib/Sema/SemaCXXCast.cpp index 11c8e6ddab5..37df2a60005 100644 --- a/clang/lib/Sema/SemaCXXCast.cpp +++ b/clang/lib/Sema/SemaCXXCast.cpp @@ -809,15 +809,17 @@ TryStaticMemberPointerUpcast(Sema &Self, Expr *&SrcExpr, QualType SrcType,    bool WasOverloadedFunction = false;    DeclAccessPair FoundOverload; -  if (FunctionDecl *Fn -        = Self.ResolveAddressOfOverloadedFunction(SrcExpr, DestType, false, -                                                  FoundOverload)) { -    CXXMethodDecl *M = cast<CXXMethodDecl>(Fn); -    SrcType = Self.Context.getMemberPointerType(Fn->getType(), -                    Self.Context.getTypeDeclType(M->getParent()).getTypePtr()); -    WasOverloadedFunction = true; +  if (SrcExpr->getType() == Self.Context.OverloadTy) { +    if (FunctionDecl *Fn +          = Self.ResolveAddressOfOverloadedFunction(SrcExpr, DestType, false, +                                                    FoundOverload)) { +      CXXMethodDecl *M = cast<CXXMethodDecl>(Fn); +      SrcType = Self.Context.getMemberPointerType(Fn->getType(), +                      Self.Context.getTypeDeclType(M->getParent()).getTypePtr()); +      WasOverloadedFunction = true; +    }    } - +      const MemberPointerType *SrcMemPtr = SrcType->getAs<MemberPointerType>();    if (!SrcMemPtr) {      msg = diag::err_bad_static_cast_member_pointer_nonmp; | 

