diff options
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 13 | ||||
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 97 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 29 | ||||
-rw-r--r-- | clang/lib/Sema/SemaLambda.cpp | 16 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaType.cpp | 5 |
11 files changed, 66 insertions, 134 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 47476537ead..c66da3a6569 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -7634,21 +7634,16 @@ bool isLayoutCompatibleUnion(ASTContext &C, RecordDecl *RD1, RecordDecl *RD2) { llvm::SmallPtrSet<FieldDecl *, 8> UnmatchedFields; - for (RecordDecl::field_iterator Field2 = RD2->field_begin(), - Field2End = RD2->field_end(); - Field2 != Field2End; ++Field2) { - UnmatchedFields.insert(*Field2); - } + for (auto *Field2 : RD2->fields()) + UnmatchedFields.insert(Field2); - for (RecordDecl::field_iterator Field1 = RD1->field_begin(), - Field1End = RD1->field_end(); - Field1 != Field1End; ++Field1) { + for (auto *Field1 : RD1->fields()) { llvm::SmallPtrSet<FieldDecl *, 8>::iterator I = UnmatchedFields.begin(), E = UnmatchedFields.end(); for ( ; I != E; ++I) { - if (isLayoutCompatible(C, *Field1, *I)) { + if (isLayoutCompatible(C, Field1, *I)) { bool Result = UnmatchedFields.erase(*I); (void) Result; assert(Result); diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 4d237ee0e8d..9c03f39e68d 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -4296,14 +4296,12 @@ void Sema::CodeCompleteConstructorInitializer( } // Add completions for members. - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; ++Field) { + for (auto *Field : ClassDecl->fields()) { if (!InitializedFields.insert(cast<FieldDecl>(Field->getCanonicalDecl()))) { SawLastInitializer = !Initializers.empty() && Initializers.back()->isAnyMemberInitializer() && - Initializers.back()->getAnyMember() == *Field; + Initializers.back()->getAnyMember() == Field; continue; } @@ -4320,7 +4318,7 @@ void Sema::CodeCompleteConstructorInitializer( : CCP_MemberDeclaration, CXCursor_MemberRef, CXAvailability_Available, - *Field)); + Field)); SawLastInitializer = false; } Results.ExitScope(); diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 38930bda1f7..217ecc587e2 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -6476,9 +6476,7 @@ static void checkIsValidOpenCLKernelParameter( // Add a null marker so we know when we've gone back up a level VisitStack.push_back((const Decl *) 0); - for (RecordDecl::field_iterator I = RD->field_begin(), - E = RD->field_end(); I != E; ++I) { - const FieldDecl *FD = *I; + for (const auto *FD : RD->fields()) { QualType QT = FD->getType(); if (ValidTypes.count(QT.getTypePtr())) diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 237c99e48a2..1d5d9d12c1a 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1104,9 +1104,8 @@ static void possibleTransparentUnionPointerType(QualType &T) { if (const RecordType *UT = T->getAsUnionType()) if (UT && UT->getDecl()->hasAttr<TransparentUnionAttr>()) { RecordDecl *UD = UT->getDecl(); - for (RecordDecl::field_iterator it = UD->field_begin(), - itend = UD->field_end(); it != itend; ++it) { - QualType QT = it->getType(); + for (const auto *I : UD->fields()) { + QualType QT = I->getType(); if (QT->isAnyPointerType() || QT->isBlockPointerType()) { T = QT; return; @@ -1540,9 +1539,8 @@ static void handleVecReturnAttr(Sema &S, Decl *D, const AttributeList &Attr) { return; } - for (RecordDecl::field_iterator iter = record->field_begin(); - iter != record->field_end(); iter++) { - if ((count == 1) || !iter->getType()->isVectorType()) { + for (const auto *I : record->fields()) { + if ((count == 1) || !I->getType()->isVectorType()) { S.Diag(Attr.getLoc(), diag::err_attribute_vecreturn_only_vector_member); return; } diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index c373b46a510..5daa46bd0d9 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -951,12 +951,11 @@ static void CheckConstexprCtorInitializer(Sema &SemaRef, SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init); } else if (Field->isAnonymousStructOrUnion()) { const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl(); - for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end(); - I != E; ++I) + for (auto *I : RD->fields()) // If an anonymous union contains an anonymous struct of which any member // is initialized, all members must be initialized. - if (!RD->isUnion() || Inits.count(*I)) - CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed); + if (!RD->isUnion() || Inits.count(I)) + CheckConstexprCtorInitializer(SemaRef, Dcl, I, Inits, Diagnosed); } } @@ -1167,9 +1166,8 @@ bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) { } bool Diagnosed = false; - for (CXXRecordDecl::field_iterator I = RD->field_begin(), - E = RD->field_end(); I != E; ++I) - CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed); + for (auto *I : RD->fields()) + CheckConstexprCtorInitializer(*this, Dcl, I, Inits, Diagnosed); if (Diagnosed) return false; } @@ -3705,9 +3703,8 @@ static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> if (const RecordType *RT = Field->getType()->getAs<RecordType>()) { const RecordDecl *RD = RT->getDecl(); if (RD->isAnonymousStructOrUnion()) { - for (RecordDecl::field_iterator Field = RD->field_begin(), - E = RD->field_end(); Field != E; ++Field) - PopulateKeysForFields(*Field, IdealInits); + for (auto *Field : RD->fields()) + PopulateKeysForFields(Field, IdealInits); return; } } @@ -3769,12 +3766,11 @@ static void DiagnoseBaseOrMemInitializerOrder( } // 3. Direct fields. - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - E = ClassDecl->field_end(); Field != E; ++Field) { + for (auto *Field : ClassDecl->fields()) { if (Field->isUnnamedBitfield()) continue; - PopulateKeysForFields(*Field, IdealInitKeys); + PopulateKeysForFields(Field, IdealInitKeys); } unsigned NumIdealInits = IdealInitKeys.size(); @@ -3970,9 +3966,7 @@ Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, // emitted, and we currently don't say. // Non-static data members. - for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(), - E = ClassDecl->field_end(); I != E; ++I) { - FieldDecl *Field = *I; + for (auto *Field : ClassDecl->fields()) { if (Field->isInvalidDecl()) continue; @@ -4383,9 +4377,7 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) { !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && !Record->isLambda()) { bool Complained = false; - for (RecordDecl::field_iterator F = Record->field_begin(), - FEnd = Record->field_end(); - F != FEnd; ++F) { + for (const auto *F : Record->fields()) { if (F->hasInClassInitializer() || F->isUnnamedBitfield()) continue; @@ -4659,9 +4651,7 @@ static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl, // -- for each non-static data member of X that is of class type (or array // thereof), the assignment operator selected to copy/move that member is // a constexpr function - for (RecordDecl::field_iterator F = ClassDecl->field_begin(), - FEnd = ClassDecl->field_end(); - F != FEnd; ++F) { + for (const auto *F : ClassDecl->fields()) { if (F->isInvalidDecl()) continue; QualType BaseType = S.Context.getBaseElementType(F->getType()); @@ -5217,9 +5207,7 @@ bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) { bool AllVariantFieldsAreConst = true; // FIXME: Handle anonymous unions declared within anonymous unions. - for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(), - UE = FieldRecord->field_end(); - UI != UE; ++UI) { + for (auto *UI : FieldRecord->fields()) { QualType UnionFieldType = S.Context.getBaseElementType(UI->getType()); if (!UnionFieldType.isConstQualified()) @@ -5227,14 +5215,14 @@ bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) { CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl(); if (UnionFieldRecord && - shouldDeleteForClassSubobject(UnionFieldRecord, *UI, + shouldDeleteForClassSubobject(UnionFieldRecord, UI, UnionFieldType.getCVRQualifiers())) return true; } // At least one member in each anonymous union must be non-const if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst && - FieldRecord->field_begin() != FieldRecord->field_end()) { + !FieldRecord->field_empty()) { if (Diagnose) S.Diag(FieldRecord->getLocation(), diag::note_deleted_default_ctor_all_const) @@ -5262,7 +5250,7 @@ bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() { // This is a silly definition, because it gives an empty union a deleted // default constructor. Don't do that. if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst && - (MD->getParent()->field_begin() != MD->getParent()->field_end())) { + !MD->getParent()->field_empty()) { if (Diagnose) S.Diag(MD->getParent()->getLocation(), diag::note_deleted_default_ctor_all_const) @@ -5385,10 +5373,9 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, return true; } - for (CXXRecordDecl::field_iterator FI = RD->field_begin(), - FE = RD->field_end(); FI != FE; ++FI) + for (auto *FI : RD->fields()) if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() && - SMI.shouldDeleteForField(*FI)) + SMI.shouldDeleteForField(FI)) return true; if (SMI.shouldDeleteForAllConstMembers()) @@ -5605,8 +5592,7 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, bool Diagnose) { - for (CXXRecordDecl::field_iterator FI = RD->field_begin(), - FE = RD->field_end(); FI != FE; ++FI) { + for (const auto *FI : RD->fields()) { if (FI->isInvalidDecl() || FI->isUnnamedBitfield()) continue; @@ -5626,7 +5612,7 @@ static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, // brace-or-equal-initializer if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) { if (Diagnose) - S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI; + S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << FI; return false; } @@ -8048,9 +8034,7 @@ Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc, } // Field constructors. - for (RecordDecl::field_iterator F = ClassDecl->field_begin(), - FEnd = ClassDecl->field_end(); - F != FEnd; ++F) { + for (const auto *F : ClassDecl->fields()) { if (F->hasInClassInitializer()) { if (Expr *E = F->getInClassInitializer()) ExceptSpec.CalledExpr(E); @@ -8137,9 +8121,7 @@ Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) { } // Field constructors. - for (RecordDecl::field_iterator F = ClassDecl->field_begin(), - FEnd = ClassDecl->field_end(); - F != FEnd; ++F) { + for (const auto *F : ClassDecl->fields()) { if (F->hasInClassInitializer()) { if (Expr *E = F->getInClassInitializer()) ExceptSpec.CalledExpr(E); @@ -8647,9 +8629,7 @@ Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) { } // Field destructors. - for (RecordDecl::field_iterator F = ClassDecl->field_begin(), - FEnd = ClassDecl->field_end(); - F != FEnd; ++F) { + for (const auto *F : ClassDecl->fields()) { if (const RecordType *RecordTy = Context.getBaseElementType(F->getType())->getAs<RecordType>()) ExceptSpec.CalledDecl(F->getLocation(), @@ -9257,10 +9237,7 @@ Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) { ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign); } - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; - ++Field) { + for (const auto *Field : ClassDecl->fields()) { QualType FieldType = Context.getBaseElementType(Field->getType()); if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) { if (CXXMethodDecl *CopyAssign = @@ -9495,9 +9472,7 @@ void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, } // Assign non-static members. - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; ++Field) { + for (auto *Field : ClassDecl->fields()) { if (Field->isUnnamedBitfield()) continue; @@ -9544,7 +9519,7 @@ void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, CXXScopeSpec SS; // Intentionally empty LookupResult MemberLookup(*this, Field->getDeclName(), Loc, LookupMemberName); - MemberLookup.addDecl(*Field); + MemberLookup.addDecl(Field); MemberLookup.resolveKind(); MemberBuilder From(OtherRef, OtherRefType, /*IsArrow=*/false, MemberLookup); @@ -9647,10 +9622,7 @@ Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) { ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign); } - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; - ++Field) { + for (const auto *Field : ClassDecl->fields()) { QualType FieldType = Context.getBaseElementType(Field->getType()); if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) { if (CXXMethodDecl *MoveAssign = @@ -9924,9 +9896,7 @@ void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, } // Assign non-static members. - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; ++Field) { + for (auto *Field : ClassDecl->fields()) { if (Field->isUnnamedBitfield()) continue; @@ -9972,7 +9942,7 @@ void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, // Build references to the field in the object we're copying from and to. LookupResult MemberLookup(*this, Field->getDeclName(), Loc, LookupMemberName); - MemberLookup.addDecl(*Field); + MemberLookup.addDecl(Field); MemberLookup.resolveKind(); MemberBuilder From(MoveOther, OtherRefType, /*IsArrow=*/false, MemberLookup); @@ -10075,10 +10045,7 @@ Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) { LookupCopyingConstructor(BaseClassDecl, Quals)) ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor); } - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - FieldEnd = ClassDecl->field_end(); - Field != FieldEnd; - ++Field) { + for (const auto *Field : ClassDecl->fields()) { QualType FieldType = Context.getBaseElementType(Field->getType()); if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) { if (CXXConstructorDecl *CopyConstructor = @@ -10244,9 +10211,7 @@ Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) { } // Field constructors. - for (RecordDecl::field_iterator F = ClassDecl->field_begin(), - FEnd = ClassDecl->field_end(); - F != FEnd; ++F) { + for (const auto *F : ClassDecl->fields()) { QualType FieldType = Context.getBaseElementType(F->getType()); if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) { CXXConstructorDecl *Constructor = diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index f32b46cfeed..dac157f303d 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6554,9 +6554,7 @@ Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, RecordDecl *UD = UT->getDecl(); FieldDecl *InitField = 0; // It's compatible if the expression matches any of the fields. - for (RecordDecl::field_iterator it = UD->field_begin(), - itend = UD->field_end(); - it != itend; ++it) { + for (auto *it : UD->fields()) { if (it->getType()->isPointerType()) { // If the transparent union contains a pointer type, we allow: // 1) void pointer @@ -6564,7 +6562,7 @@ Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, if (RHSType->isPointerType()) if (RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) { RHS = ImpCastExprToType(RHS.take(), it->getType(), CK_BitCast); - InitField = *it; + InitField = it; break; } @@ -6572,7 +6570,7 @@ Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, Expr::NPC_ValueDependentIsNull)) { RHS = ImpCastExprToType(RHS.take(), it->getType(), CK_NullToPointer); - InitField = *it; + InitField = it; break; } } @@ -6581,7 +6579,7 @@ Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, if (CheckAssignmentConstraints(it->getType(), RHS, Kind) == Compatible) { RHS = ImpCastExprToType(RHS.take(), it->getType(), Kind); - InitField = *it; + InitField = it; break; } } diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 38e93f7858b..711c0c49972 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -441,26 +441,22 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity, Entity, ILE, RequiresSecondPass); else if (RDecl->isUnion() && isa<CXXRecordDecl>(RDecl) && cast<CXXRecordDecl>(RDecl)->hasInClassInitializer()) { - for (RecordDecl::field_iterator Field = RDecl->field_begin(), - FieldEnd = RDecl->field_end(); - Field != FieldEnd; ++Field) { + for (auto *Field : RDecl->fields()) { if (Field->hasInClassInitializer()) { - FillInValueInitForField(0, *Field, Entity, ILE, RequiresSecondPass); + FillInValueInitForField(0, Field, Entity, ILE, RequiresSecondPass); break; } } } else { unsigned Init = 0; - for (RecordDecl::field_iterator Field = RDecl->field_begin(), - FieldEnd = RDecl->field_end(); - Field != FieldEnd; ++Field) { + for (auto *Field : RDecl->fields()) { if (Field->isUnnamedBitfield()) continue; if (hadError) return; - FillInValueInitForField(Init, *Field, Entity, ILE, RequiresSecondPass); + FillInValueInitForField(Init, Field, Entity, ILE, RequiresSecondPass); if (hadError) return; @@ -587,13 +583,10 @@ int InitListChecker::numArrayElements(QualType DeclType) { int InitListChecker::numStructUnionElements(QualType DeclType) { RecordDecl *structDecl = DeclType->getAs<RecordType>()->getDecl(); int InitializableMembers = 0; - for (RecordDecl::field_iterator - Field = structDecl->field_begin(), - FieldEnd = structDecl->field_end(); - Field != FieldEnd; ++Field) { + for (const auto *Field : structDecl->fields()) if (!Field->isUnnamedBitfield()) ++InitializableMembers; - } + if (structDecl->isUnion()) return std::min(InitializableMembers, 1); return InitializableMembers - structDecl->hasFlexibleArrayMember(); @@ -2293,8 +2286,7 @@ InitListChecker::getStructuredSubobjectInit(InitListExpr *IList, unsigned Index, if (RDecl->isUnion()) NumElements = 1; else - NumElements = std::distance(RDecl->field_begin(), - RDecl->field_end()); + NumElements = llvm::distance(RDecl->fields()); } Result->reserveInits(SemaRef.Context, NumElements); @@ -5468,9 +5460,7 @@ static void performLifetimeExtension(Expr *Init, const ValueDecl *ExtendingD) { performReferenceExtension(ILE->getInit(0), ExtendingD); else { unsigned Index = 0; - for (RecordDecl::field_iterator I = RD->field_begin(), - E = RD->field_end(); - I != E; ++I) { + for (const auto *I : RD->fields()) { if (Index >= ILE->getNumInits()) break; if (I->isUnnamedBitfield()) @@ -6263,8 +6253,7 @@ static bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, if (!RD || !RD->hasUninitializedReferenceMember()) return false; - for (CXXRecordDecl::field_iterator FI = RD->field_begin(), - FE = RD->field_end(); FI != FE; ++FI) { + for (const auto *FI : RD->fields()) { if (FI->isUnnamedBitfield()) continue; diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp index 0dbe8ced187..4ef23ad72d4 100644 --- a/clang/lib/Sema/SemaLambda.cpp +++ b/clang/lib/Sema/SemaLambda.cpp @@ -1147,11 +1147,9 @@ void Sema::ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope, CXXRecordDecl *Class = LSI->Lambda; Class->setInvalidDecl(); SmallVector<Decl*, 4> Fields; - for (RecordDecl::field_iterator i = Class->field_begin(), - e = Class->field_end(); i != e; ++i) - Fields.push_back(*i); - ActOnFields(0, Class->getLocation(), Class, Fields, - SourceLocation(), SourceLocation(), 0); + llvm::copy(Class->fields(), std::back_inserter(Fields)); + ActOnFields(0, Class->getLocation(), Class, Fields, SourceLocation(), + SourceLocation(), 0); CheckCompletedCXXClass(Class); PopFunctionScopeInfo(); @@ -1510,11 +1508,9 @@ ExprResult Sema::ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body, // Finalize the lambda class. SmallVector<Decl*, 4> Fields; - for (RecordDecl::field_iterator i = Class->field_begin(), - e = Class->field_end(); i != e; ++i) - Fields.push_back(*i); - ActOnFields(0, Class->getLocation(), Class, Fields, - SourceLocation(), SourceLocation(), 0); + llvm::copy(Class->fields(), std::back_inserter(Fields)); + ActOnFields(0, Class->getLocation(), Class, Fields, SourceLocation(), + SourceLocation(), 0); CheckCompletedCXXClass(Class); } diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index eaf3d35148d..6e1bca4eece 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1715,9 +1715,7 @@ IsTransparentUnionStandardConversion(Sema &S, Expr* From, // The field to initialize within the transparent union. RecordDecl *UD = UT->getDecl(); // It's compatible if the expression matches any of the fields. - for (RecordDecl::field_iterator it = UD->field_begin(), - itend = UD->field_end(); - it != itend; ++it) { + for (const auto *it : UD->fields()) { if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS, CStyle, /*ObjCWritebackConversion=*/false)) { ToType = it->getType(); diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 5035b6cffde..1fce1f17572 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -3350,9 +3350,7 @@ void Sema::ActOnCapturedRegionError() { Record->setInvalidDecl(); SmallVector<Decl*, 4> Fields; - for (RecordDecl::field_iterator I = Record->field_begin(), - E = Record->field_end(); I != E; ++I) - Fields.push_back(*I); + llvm::copy(Record->fields(), std::back_inserter(Fields)); ActOnFields(/*Scope=*/0, Record->getLocation(), Record, Fields, SourceLocation(), SourceLocation(), /*AttributeList=*/0); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index a0153dc2e88..7ba824b909b 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -5329,12 +5329,11 @@ bool Sema::RequireLiteralType(SourceLocation Loc, QualType T, return true; } } - for (CXXRecordDecl::field_iterator I = RD->field_begin(), - E = RD->field_end(); I != E; ++I) { + for (const auto *I : RD->fields()) { if (!I->getType()->isLiteralType(Context) || I->getType().isVolatileQualified()) { Diag(I->getLocation(), diag::note_non_literal_field) - << RD << *I << I->getType() + << RD << I << I->getType() << I->getType().isVolatileQualified(); return true; } |