summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2012-02-27 22:38:26 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2012-02-27 22:38:26 +0000
commitaa6feaa7eac579636389dfa31e116949259abf11 (patch)
tree3ecb41f4d43d169f20803c6b8aa124d2a61b255f /clang/lib
parent7b4646184bf94d2ab08acf159246ad1872147b4d (diff)
downloadbcm5719-llvm-aa6feaa7eac579636389dfa31e116949259abf11.tar.gz
bcm5719-llvm-aa6feaa7eac579636389dfa31e116949259abf11.zip
Implement a FIXME for conversion sequence distinction. Should fix PR12092.
llvm-svn: 151577
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 12d4e48352e..dd781a86031 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -3163,9 +3163,15 @@ CompareImplicitConversionSequences(Sema &S,
// list-initialization sequence L2 if L1 converts to std::initializer_list<X>
// for some X and L2 does not.
if (Result == ImplicitConversionSequence::Indistinguishable &&
+ !ICS1.isBad() &&
ICS1.isListInitializationSequence() &&
ICS2.isListInitializationSequence()) {
- // FIXME: Find out if ICS1 converts to initializer_list and ICS2 doesn't.
+ if (ICS1.isStdInitializerListElement() &&
+ !ICS2.isStdInitializerListElement())
+ return ImplicitConversionSequence::Better;
+ if (!ICS1.isStdInitializerListElement() &&
+ ICS2.isStdInitializerListElement())
+ return ImplicitConversionSequence::Worse;
}
return Result;
@@ -4241,11 +4247,12 @@ TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
// all the elements can be implicitly converted to X, the implicit
// conversion sequence is the worst conversion necessary to convert an
// element of the list to X.
+ bool toStdInitializerList = false;
QualType X;
if (ToType->isArrayType())
X = S.Context.getBaseElementType(ToType);
else
- (void)S.isStdInitializerList(ToType, &X);
+ toStdInitializerList = S.isStdInitializerList(ToType, &X);
if (!X.isNull()) {
for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
Expr *Init = From->getInit(i);
@@ -4265,6 +4272,7 @@ TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
Result = ICS;
}
Result.setListInitializationSequence();
+ Result.setStdInitializerListElement(toStdInitializerList);
return Result;
}
OpenPOWER on IntegriCloud