diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index cf9b10c..c835217 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -447,11 +447,11 @@
                                                    bool Complain);
   void FixOverloadedFunctionReference(Expr *E, FunctionDecl *Fn);
 
-  Expr *ResolveOverloadedCallFn(Expr *Fn, OverloadedFunctionDecl *Ovl,
-                                SourceLocation LParenLoc,
-                                Expr **Args, unsigned NumArgs,
-                                SourceLocation *CommaLocs, 
-                                SourceLocation RParenLoc);
+  FunctionDecl *ResolveOverloadedCallFn(Expr *Fn, OverloadedFunctionDecl *Ovl,
+                                        SourceLocation LParenLoc,
+                                        Expr **Args, unsigned NumArgs,
+                                        SourceLocation *CommaLocs, 
+                                        SourceLocation RParenLoc);
 
   ExprResult 
   BuildCallToObjectOfClassType(Expr *Object, SourceLocation LParenLoc,
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index a6e1611..a13bcba 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1295,12 +1295,16 @@
   }
 
   if (Ovl) {
-    Fn = ResolveOverloadedCallFn(Fn, Ovl, LParenLoc, Args, NumArgs, CommaLocs,
-                                 RParenLoc);
-    if (!Fn)
+    FDecl = ResolveOverloadedCallFn(Fn, Ovl, LParenLoc, Args, NumArgs, CommaLocs,
+                                    RParenLoc);
+    if (!FDecl)
       return true;
 
-    // Fall through and build the call to Fn.
+    // Update Fn to refer to the actual function selected.
+    Expr *NewFn = new DeclRefExpr(FDecl, FDecl->getType(), 
+                                  Fn->getSourceRange().getBegin());
+    Fn->Destroy(Context);
+    Fn = NewFn;
   }
 
   if (getLangOptions().CPlusPlus && Fn->getType()->isRecordType())
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 14e0f44..c6b0284 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -2967,24 +2967,20 @@
 /// (which eventually refers to the set of overloaded functions in
 /// Ovl) and the call arguments Args/NumArgs, attempt to resolve the
 /// function call down to a specific function. If overload resolution
-/// succeeds, returns an expression that refers to a specific function
-/// and deletes Fn. Otherwise, emits diagnostics, deletes all of the
+/// succeeds, returns the function declaration produced by overload
+/// resolution. Otherwise, emits diagnostics, deletes all of the
 /// arguments and Fn, and returns NULL.
-Expr *Sema::ResolveOverloadedCallFn(Expr *Fn, OverloadedFunctionDecl *Ovl,
-                                    SourceLocation LParenLoc,
-                                    Expr **Args, unsigned NumArgs,
-                                    SourceLocation *CommaLocs, 
-                                    SourceLocation RParenLoc) {
+FunctionDecl *Sema::ResolveOverloadedCallFn(Expr *Fn, OverloadedFunctionDecl *Ovl,
+                                            SourceLocation LParenLoc,
+                                            Expr **Args, unsigned NumArgs,
+                                            SourceLocation *CommaLocs, 
+                                            SourceLocation RParenLoc) {
   OverloadCandidateSet CandidateSet;
   AddOverloadCandidates(Ovl, Args, NumArgs, CandidateSet);
   OverloadCandidateSet::iterator Best;
   switch (BestViableFunction(CandidateSet, Best)) {
-  case OR_Success: {
-    Expr *NewFn = new DeclRefExpr(Best->Function, Best->Function->getType(), 
-                                  Fn->getSourceRange().getBegin());
-    Fn->Destroy(Context);
-    return NewFn;
-  }
+  case OR_Success:
+    return Best->Function;
 
   case OR_No_Viable_Function:
     Diag(Fn->getSourceRange().getBegin(), 
