diff options
author | John McCall <rjmccall@apple.com> | 2010-11-11 00:46:36 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-11-11 00:46:36 +0000 |
commit | b934c2d77144471f35c5ebae9e925b056dac8112 (patch) | |
tree | 0513d03f83abbbab2cae0575bc95d450ad7cc00b /lib/Sema/SemaInit.cpp | |
parent | e47be3e9682e82da15059006f43c7f3c021e4fff (diff) |
Unnest; no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118753 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInit.cpp')
-rw-r--r-- | lib/Sema/SemaInit.cpp | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 7a2db63376..999d1d24c6 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -735,48 +735,7 @@ void InitListChecker::CheckScalarType(const InitializedEntity &Entity, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) { - if (Index < IList->getNumInits()) { - Expr *expr = IList->getInit(Index); - if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) { - SemaRef.Diag(SubIList->getLocStart(), - diag::warn_many_braces_around_scalar_init) - << SubIList->getSourceRange(); - - CheckScalarType(Entity, SubIList, DeclType, Index, StructuredList, - StructuredIndex); - return; - } else if (isa<DesignatedInitExpr>(expr)) { - SemaRef.Diag(expr->getSourceRange().getBegin(), - diag::err_designator_for_scalar_init) - << DeclType << expr->getSourceRange(); - hadError = true; - ++Index; - ++StructuredIndex; - return; - } - - ExprResult Result = - SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), - SemaRef.Owned(expr)); - - Expr *ResultExpr = 0; - - if (Result.isInvalid()) - hadError = true; // types weren't compatible. - else { - ResultExpr = Result.takeAs<Expr>(); - - if (ResultExpr != expr) { - // The type was promoted, update initializer list. - IList->setInit(Index, ResultExpr); - } - } - if (hadError) - ++StructuredIndex; - else - UpdateStructuredListElement(StructuredList, StructuredIndex, ResultExpr); - ++Index; - } else { + if (Index >= IList->getNumInits()) { SemaRef.Diag(IList->getLocStart(), diag::err_empty_scalar_initializer) << IList->getSourceRange(); hadError = true; @@ -784,6 +743,47 @@ void InitListChecker::CheckScalarType(const InitializedEntity &Entity, ++StructuredIndex; return; } + + Expr *expr = IList->getInit(Index); + if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) { + SemaRef.Diag(SubIList->getLocStart(), + diag::warn_many_braces_around_scalar_init) + << SubIList->getSourceRange(); + + CheckScalarType(Entity, SubIList, DeclType, Index, StructuredList, + StructuredIndex); + return; + } else if (isa<DesignatedInitExpr>(expr)) { + SemaRef.Diag(expr->getSourceRange().getBegin(), + diag::err_designator_for_scalar_init) + << DeclType << expr->getSourceRange(); + hadError = true; + ++Index; + ++StructuredIndex; + return; + } + + ExprResult Result = + SemaRef.PerformCopyInitialization(Entity, expr->getLocStart(), + SemaRef.Owned(expr)); + + Expr *ResultExpr = 0; + + if (Result.isInvalid()) + hadError = true; // types weren't compatible. + else { + ResultExpr = Result.takeAs<Expr>(); + + if (ResultExpr != expr) { + // The type was promoted, update initializer list. + IList->setInit(Index, ResultExpr); + } + } + if (hadError) + ++StructuredIndex; + else + UpdateStructuredListElement(StructuredList, StructuredIndex, ResultExpr); + ++Index; } void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, |