diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 4af8cc0..9d2e06d 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -1636,10 +1636,10 @@
   case OR_No_Viable_Function:
     if (InitEntity)
       Diag(Loc, diag::err_ovl_no_viable_function_in_init)
-        << InitEntity << (unsigned)CandidateSet.size() << Range;
+        << InitEntity << Range;
     else
       Diag(Loc, diag::err_ovl_no_viable_function_in_init)
-        << ClassType << (unsigned)CandidateSet.size() << Range;
+        << ClassType << Range;
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
     return 0;
     
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 9f494d9..d5d2b08 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -428,7 +428,7 @@
     if (AllowMissing)
       return false;
     return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
-      << Name << 0 << Range;
+      << Name << Range;
   }
 
   OverloadCandidateSet Candidates;
@@ -464,7 +464,7 @@
     if (AllowMissing)
       return false;
     Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
-      << Name << (unsigned)Candidates.size() << Range;
+      << Name << Range;
     PrintOverloadCandidates(Candidates, /*OnlyViable=*/false);
     return true;
 
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 049aca5..ffb2979 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -3633,10 +3633,9 @@
     return Best->Function;
 
   case OR_No_Viable_Function:
-    Diag(Fn->getSourceRange().getBegin(), 
+    Diag(Fn->getSourceRange().getBegin(),
          diag::err_ovl_no_viable_function_in_call)
-      << UnqualifiedName << (unsigned)CandidateSet.size()
-      << Fn->getSourceRange();
+      << UnqualifiedName << Fn->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
     break;
 
@@ -3705,8 +3704,7 @@
     case OR_No_Viable_Function:
       Diag(MemExpr->getSourceRange().getBegin(), 
            diag::err_ovl_no_viable_member_function_in_call)
-        << Ovl->getDeclName() << (unsigned)CandidateSet.size()
-        << MemExprE->getSourceRange();
+        << Ovl->getDeclName() << MemExprE->getSourceRange();
       PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
       // FIXME: Leaking incoming expressions!
       return true;
@@ -3823,8 +3821,7 @@
   case OR_No_Viable_Function:
     Diag(Object->getSourceRange().getBegin(), 
          diag::err_ovl_no_viable_object_call)
-      << Object->getType() << (unsigned)CandidateSet.size()
-      << Object->getSourceRange();
+      << Object->getType() << Object->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
     break;
 
@@ -3984,8 +3981,7 @@
         << BasePtr->getType() << BasePtr->getSourceRange();
     else
       Diag(OpLoc, diag::err_ovl_no_viable_oper)
-        << "operator->" << (unsigned)CandidateSet.size()
-        << BasePtr->getSourceRange();
+        << "operator->" << BasePtr->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
     return true;
 
