aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-03-01 17:12:46 +0000
committerDouglas Gregor <dgregor@apple.com>2009-03-01 17:12:46 +0000
commited8a93d17b8936dc7978cdc37f3f00fc49d24f71 (patch)
treed11251bd62bc42cfb979ecef68824a402a8dd6d4 /lib/Sema/SemaInit.cpp
parent91b0b0cf6b537cbcbca0038c7032f87161a41d31 (diff)
Fix PR3509 by providing correct starting locations for initializer lists
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65777 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInit.cpp')
-rw-r--r--lib/Sema/SemaInit.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 5b022217e5..02df9b32fa 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -410,7 +410,7 @@ InitListChecker::InitListChecker(Sema &S, InitListExpr *IL, QualType &T)
unsigned newIndex = 0;
unsigned newStructuredIndex = 0;
FullyStructuredList
- = getStructuredSubobjectInit(IL, newIndex, T, 0, 0, SourceRange());
+ = getStructuredSubobjectInit(IL, newIndex, T, 0, 0, IL->getSourceRange());
CheckExplicitInitList(IL, T, newIndex, FullyStructuredList, newStructuredIndex,
/*TopLevelObject=*/true);
@@ -470,7 +470,8 @@ void InitListChecker::CheckImplicitInitList(InitListExpr *ParentIList,
InitListExpr *StructuredSubobjectInitList
= getStructuredSubobjectInit(ParentIList, Index, T, StructuredList,
StructuredIndex,
- ParentIList->getInit(Index)->getSourceRange());
+ SourceRange(ParentIList->getInit(Index)->getSourceRange().getBegin(),
+ ParentIList->getSourceRange().getEnd()));
unsigned StructuredSubobjectInitIndex = 0;
// Check the element types and build the structural subobject.
@@ -481,7 +482,7 @@ void InitListChecker::CheckImplicitInitList(InitListExpr *ParentIList,
TopLevelObject);
unsigned EndIndex = (Index == StartIndex? StartIndex : Index - 1);
- // Update the structured sub-object initialize so that it's ending
+ // Update the structured sub-object initializer so that it's ending
// range corresponds with the end of the last initializer it used.
if (EndIndex < ParentIList->getNumInits()) {
SourceLocation EndLoc
@@ -1088,8 +1089,8 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList,
// Determine the structural initializer list that corresponds to the
// current subobject.
StructuredList = IsFirstDesignator? SyntacticToSemantic[IList]
- : getStructuredSubobjectInit(IList, Index, CurrentObjectType, StructuredList,
- StructuredIndex,
+ : getStructuredSubobjectInit(IList, Index, CurrentObjectType,
+ StructuredList, StructuredIndex,
SourceRange(D->getStartLocation(),
DIE->getSourceRange().getEnd()));
assert(StructuredList && "Expected a structured initializer list");
@@ -1421,7 +1422,8 @@ InitListChecker::getStructuredSubobjectInit(InitListExpr *IList, unsigned Index,
// Here, xs[0].a == 0 and xs[0].b == 3, since the second,
// designated initializer re-initializes the whole
// subobject [0], overwriting previous initializers.
- SemaRef.Diag(InitRange.getBegin(), diag::warn_subobject_initializer_overrides)
+ SemaRef.Diag(InitRange.getBegin(),
+ diag::warn_subobject_initializer_overrides)
<< InitRange;
SemaRef.Diag(ExistingInit->getSourceRange().getBegin(),
diag::note_previous_initializer)
@@ -1429,12 +1431,10 @@ InitListChecker::getStructuredSubobjectInit(InitListExpr *IList, unsigned Index,
<< ExistingInit->getSourceRange();
}
- SourceLocation StartLoc;
- if (Index < IList->getNumInits())
- StartLoc = IList->getInit(Index)->getSourceRange().getBegin();
InitListExpr *Result
- = new (SemaRef.Context) InitListExpr(StartLoc, 0, 0,
- IList->getSourceRange().getEnd());
+ = new (SemaRef.Context) InitListExpr(InitRange.getBegin(), 0, 0,
+ InitRange.getEnd());
+
Result->setType(CurrentObjectType);
// Link this new initializer list into the structured initializer