diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index 45e6669..ee4a9e4 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -766,7 +766,8 @@
 
   ImplicitConversionSequence 
   TryCopyInitialization(Expr* From, QualType ToType,
-                        bool SuppressUserConversions, bool ForceRValue);
+                        bool SuppressUserConversions, bool ForceRValue,
+                        bool InOverloadResolution);
   bool PerformCopyInitialization(Expr *&From, QualType ToType, 
                                  const char *Flavor, bool Elidable = false);
 
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 55417c7..cdda6ab 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -1238,7 +1238,8 @@
       // standard doesn't say.
       ICS = Self.TryCopyInitialization(From, TTy, 
                                        /*SuppressUserConversions=*/false,
-                                       /*ForceRValue=*/false);
+                                       /*ForceRValue=*/false,
+                                       /*InOverloadResolution=*/false);
     }
   } else {
     //     -- Otherwise: E1 can be converted to match E2 if E1 can be
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index f545db8..fb75ff3 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -666,7 +666,8 @@
       ImplicitConversionSequence ICS 
         = SemaRef.TryCopyInitialization(expr, ElemType,
                                         /*SuppressUserConversions=*/false,
-                                        /*ForceRValue=*/false);
+                                        /*ForceRValue=*/false,
+                                        /*InOverloadResolution=*/false);
 
       if (ICS.ConversionKind != ImplicitConversionSequence::BadConversion) {
         if (SemaRef.PerformImplicitConversion(expr, ElemType, ICS, 
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index b4f2581..5c92e12 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -1922,7 +1922,8 @@
 /// then we treat @p From as an rvalue, even if it is an lvalue.
 ImplicitConversionSequence 
 Sema::TryCopyInitialization(Expr *From, QualType ToType, 
-                            bool SuppressUserConversions, bool ForceRValue) {
+                            bool SuppressUserConversions, bool ForceRValue,
+                            bool InOverloadResolution) {
   if (ToType->isReferenceType()) {
     ImplicitConversionSequence ICS;
     CheckReferenceInit(From, ToType, 
@@ -2172,7 +2173,8 @@
       QualType ParamType = Proto->getArgType(ArgIdx);
       Candidate.Conversions[ArgIdx] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
-                                SuppressUserConversions, ForceRValue);
+                                SuppressUserConversions, ForceRValue,
+                                /*InOverloadResolution=*/true);
       if (Candidate.Conversions[ArgIdx].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2288,7 +2290,8 @@
       QualType ParamType = Proto->getArgType(ArgIdx);
       Candidate.Conversions[ArgIdx + 1] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
-                                SuppressUserConversions, ForceRValue);
+                                SuppressUserConversions, ForceRValue,
+                                /*InOverloadResolution=*/false);
       if (Candidate.Conversions[ArgIdx + 1].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2445,7 +2448,8 @@
   ImplicitConversionSequence ICS = 
     TryCopyInitialization(&Call, ToType, 
                           /*SuppressUserConversions=*/true,
-                          /*ForceRValue=*/false);
+                          /*ForceRValue=*/false,
+                          /*InOverloadResolution=*/false);
   
   switch (ICS.ConversionKind) {
   case ImplicitConversionSequence::StandardConversion:
@@ -2560,7 +2564,8 @@
       Candidate.Conversions[ArgIdx + 1] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
                                 /*SuppressUserConversions=*/false,
-                                /*ForceRValue=*/false);
+                                /*ForceRValue=*/false,
+                                /*InOverloadResolution=*/false);
       if (Candidate.Conversions[ArgIdx + 1].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2692,7 +2697,8 @@
       Candidate.Conversions[ArgIdx] 
         = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx], 
                                 ArgIdx == 0 && IsAssignmentOperator,
-                                /*ForceRValue=*/false);
+                                /*ForceRValue=*/false,
+                                /*InOverloadResolution=*/false);
     }
     if (Candidate.Conversions[ArgIdx].ConversionKind 
         == ImplicitConversionSequence::BadConversion) {
