diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-15 04:56:10 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-15 04:56:10 +0000 |
commit | 711997184366d584c9c437102cae1e9d9927b986 (patch) | |
tree | 08f5b9464f9e1b11a3a59894b00634343935c0b2 /lib/Sema/SemaInit.cpp | |
parent | 62e445c4dff3cfa6b040153a6f53116073d85846 (diff) |
Switch designated-initializer checking from using designator iterators
to using designator indices. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69147 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInit.cpp')
-rw-r--r-- | lib/Sema/SemaInit.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 7da1f6bb23..3a053216ae 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -281,7 +281,7 @@ class InitListChecker { InitListExpr *StructuredList, unsigned &StructuredIndex); bool CheckDesignatedInitializer(InitListExpr *IList, DesignatedInitExpr *DIE, - DesignatedInitExpr::designators_iterator D, + unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, @@ -856,7 +856,7 @@ void InitListChecker::CheckArrayType(InitListExpr *IList, QualType &DeclType, // Handle this designated initializer. elementIndex will be // updated to be the next array element we'll initialize. - if (CheckDesignatedInitializer(IList, DIE, DIE->designators_begin(), + if (CheckDesignatedInitializer(IList, DIE, 0, DeclType, 0, &elementIndex, Index, StructuredList, StructuredIndex, true, false)) { @@ -958,7 +958,7 @@ void InitListChecker::CheckStructUnionTypes(InitListExpr *IList, // Handle this designated initializer. Field will be updated to // the next field that we'll be initializing. - if (CheckDesignatedInitializer(IList, DIE, DIE->designators_begin(), + if (CheckDesignatedInitializer(IList, DIE, 0, DeclType, &Field, 0, Index, StructuredList, StructuredIndex, true, TopLevelObject)) @@ -1043,8 +1043,9 @@ void InitListChecker::CheckStructUnionTypes(InitListExpr *IList, /// @param IList The initializer list in which this designated /// initializer occurs. /// -/// @param DIE The designated initializer and its initialization -/// expression. +/// @param DIE The designated initializer expression. +/// +/// @param DesigIdx The index of the current designator. /// /// @param DeclType The type of the "current object" (C99 6.7.8p17), /// into which the designation in @p DIE should refer. @@ -1068,7 +1069,7 @@ void InitListChecker::CheckStructUnionTypes(InitListExpr *IList, bool InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, DesignatedInitExpr *DIE, - DesignatedInitExpr::designators_iterator D, + unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, @@ -1077,7 +1078,7 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) { - if (D == DIE->designators_end()) { + if (DesigIdx == DIE->size()) { // Check the actual initialization for the designated object type. bool prevHadError = hadError; @@ -1099,10 +1100,11 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, return hadError && !prevHadError; } - bool IsFirstDesignator = (D == DIE->designators_begin()); + bool IsFirstDesignator = (DesigIdx == 0); assert((IsFirstDesignator || StructuredList) && "Need a non-designated initializer list to start from"); + DesignatedInitExpr::Designator *D = DIE->getDesignator(DesigIdx); // Determine the structural initializer list that corresponds to the // current subobject. StructuredList = IsFirstDesignator? SyntacticToSemantic[IList] @@ -1199,11 +1201,11 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, // This designator names a flexible array member. if (Field->getType()->isIncompleteArrayType()) { bool Invalid = false; - DesignatedInitExpr::designators_iterator NextD = D; - ++NextD; - if (NextD != DIE->designators_end()) { + if ((DesigIdx + 1) != DIE->size()) { // We can't designate an object within the flexible array // member (because GCC doesn't allow it). + DesignatedInitExpr::Designator *NextD + = DIE->getDesignator(DesigIdx + 1); SemaRef.Diag(NextD->getStartLocation(), diag::err_designator_into_flexible_array_member) << SourceRange(NextD->getStartLocation(), @@ -1259,8 +1261,8 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, // Recurse to check later designated subobjects. QualType FieldType = (*Field)->getType(); unsigned newStructuredIndex = FieldIndex; - if (CheckDesignatedInitializer(IList, DIE, ++D, FieldType, 0, 0, Index, - StructuredList, newStructuredIndex, + if (CheckDesignatedInitializer(IList, DIE, DesigIdx + 1, FieldType, 0, 0, + Index, StructuredList, newStructuredIndex, true, false)) return true; } @@ -1377,13 +1379,12 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, // Move to the next designator unsigned ElementIndex = DesignatedStartIndex.getZExtValue(); unsigned OldIndex = Index; - ++D; while (DesignatedStartIndex <= DesignatedEndIndex) { // Recurse to check later designated subobjects. QualType ElementType = AT->getElementType(); Index = OldIndex; - if (CheckDesignatedInitializer(IList, DIE, D, ElementType, 0, 0, Index, - StructuredList, ElementIndex, + if (CheckDesignatedInitializer(IList, DIE, DesigIdx + 1, ElementType, 0, 0, + Index, StructuredList, ElementIndex, (DesignatedStartIndex == DesignatedEndIndex), false)) return true; |