[cfe-commits] r94324 - /cfe/trunk/lib/Sema/SemaInit.cpp
Anders Carlsson
andersca at mac.com
Sat Jan 23 11:22:30 PST 2010
Author: andersca
Date: Sat Jan 23 13:22:30 2010
New Revision: 94324
URL: http://llvm.org/viewvc/llvm-project?rev=94324&view=rev
Log:
When an InitializedEntity is passed to CheckSingleInitializer, call the new Sema::PerformCopyInitialization overload.
Modified:
cfe/trunk/lib/Sema/SemaInit.cpp
Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=94324&r1=94323&r2=94324&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Sat Jan 23 13:22:30 2010
@@ -76,32 +76,46 @@
QualType InitType = InitExpr->getType();
if (S.getLangOptions().CPlusPlus) {
- // FIXME: I dislike this error message. A lot.
- if (S.PerformImplicitConversion(InitExpr, DeclType,
- Sema::AA_Initializing,
- /*DirectInit=*/false)) {
- ImplicitConversionSequence ICS;
- OverloadCandidateSet CandidateSet;
- if (S.IsUserDefinedConversion(InitExpr, DeclType, ICS.UserDefined,
- CandidateSet,
- true, false, false) != OR_Ambiguous) {
+ if (Entity) {
+ assert(Entity->getType() == DeclType);
+
+ // C++ [dcl.init.aggr]p2:
+ // Each member is copy-initialized from the corresponding
+ // initializer-clause
+ Sema::OwningExprResult Result =
+ S.PerformCopyInitialization(*Entity, InitExpr->getLocStart(),
+ S.Owned(InitExpr));
+
+ return move(Result);
+ } else {
+ // FIXME: I dislike this error message. A lot.
+ if (S.PerformImplicitConversion(InitExpr, DeclType,
+ Sema::AA_Initializing,
+ /*DirectInit=*/false)) {
+ ImplicitConversionSequence ICS;
+ OverloadCandidateSet CandidateSet;
+ if (S.IsUserDefinedConversion(InitExpr, DeclType, ICS.UserDefined,
+ CandidateSet,
+ true, false, false) != OR_Ambiguous) {
+ S.Diag(InitExpr->getSourceRange().getBegin(),
+ diag::err_typecheck_convert_incompatible)
+ << DeclType << InitExpr->getType()
+ << Sema::AA_Initializing
+ << InitExpr->getSourceRange();
+ return S.ExprError();
+ }
S.Diag(InitExpr->getSourceRange().getBegin(),
- diag::err_typecheck_convert_incompatible)
- << DeclType << InitExpr->getType() << Sema::AA_Initializing
- << InitExpr->getSourceRange();
+ diag::err_typecheck_convert_ambiguous)
+ << DeclType << InitExpr->getType() << InitExpr->getSourceRange();
+ S.PrintOverloadCandidates(CandidateSet, Sema::OCD_AllCandidates,
+ &InitExpr, 1);
+
return S.ExprError();
}
- S.Diag(InitExpr->getSourceRange().getBegin(),
- diag::err_typecheck_convert_ambiguous)
- << DeclType << InitExpr->getType() << InitExpr->getSourceRange();
- S.PrintOverloadCandidates(CandidateSet, Sema::OCD_AllCandidates,
- &InitExpr, 1);
-
- return S.ExprError();
- }
- Init.release();
- return S.Owned(InitExpr);
+ Init.release();
+ return S.Owned(InitExpr);
+ }
}
Sema::AssignConvertType ConvTy =
More information about the cfe-commits
mailing list