Tweak Sema::CheckReferenceInit so that it (optionally) computes an 
ImplicitConversionSequence and, when doing so, following the specific
rules of [over.best.ics]. 

The computation of the implicit conversion sequences implements C++
[over.ics.ref], but we do not (yet) have ranking for implicit
conversion sequences that use reference binding.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58357 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 8e76548..551f61a 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -39,6 +39,7 @@
     ICC_Conversion,
     ICC_Conversion,
     ICC_Conversion,
+    ICC_Conversion,
     ICC_Conversion
   };
   return Category[(int)Kind];
@@ -61,6 +62,7 @@
     ICR_Conversion,
     ICR_Conversion,
     ICR_Conversion,
+    ICR_Conversion,
     ICR_Conversion
   };
   return Rank[(int)Kind];
@@ -82,7 +84,8 @@
     "Floating-integral conversion",
     "Pointer conversion",
     "Pointer-to-member conversion",
-    "Boolean conversion"
+    "Boolean conversion",
+    "Derived-to-base conversion"
   };
   return Name[Kind];
 }
@@ -1066,10 +1069,7 @@
     return ICS;
   } else if (ToType->isReferenceType()) {
     ImplicitConversionSequence ICS;
-    if (CheckReferenceInit(From, ToType, /*Complain=*/false))
-      ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
-    else
-      ICS.ConversionKind = ImplicitConversionSequence::StandardConversion;
+    CheckReferenceInit(From, ToType, &ICS);
     return ICS;
   } else {
     return TryImplicitConversion(From, ToType);