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);