@@ -3971,8 +3971,7 @@ static bool constructAggregate(EvalInfo &Info, const FPOptions FPO,
39713971 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(RD))
39723972 NumBases = CXXRD->getNumBases();
39733973
3974- *Res = APValue(APValue::UninitStruct(), NumBases,
3975- std::distance(RD->field_begin(), RD->field_end()));
3974+ *Res = APValue(APValue::UninitStruct(), NumBases, RD->getNumFields());
39763975
39773976 SmallVector<std::tuple<APValue *, QualType, unsigned>> ReverseList;
39783977 // we need to traverse backwards
@@ -5529,8 +5528,8 @@ static bool handleDefaultInitValue(QualType T, APValue &Result) {
55295528 Result = APValue((const FieldDecl *)nullptr);
55305529 return true;
55315530 }
5532- Result = APValue(APValue::UninitStruct(), RD->getNumBases(),
5533- std::distance( RD->field_begin (), RD->field_end() ));
5531+ Result =
5532+ APValue(APValue::UninitStruct(), RD->getNumBases (), RD->getNumFields( ));
55345533
55355534 unsigned Index = 0;
55365535 for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
@@ -7184,7 +7183,7 @@ static bool HandleConstructorCall(const Expr *E, const LValue &This,
71847183 if (!Result.hasValue()) {
71857184 if (!RD->isUnion())
71867185 Result = APValue(APValue::UninitStruct(), RD->getNumBases(),
7187- std::distance( RD->field_begin(), RD->field_end() ));
7186+ RD->getNumFields( ));
71887187 else
71897188 // A union starts with no active member.
71907189 Result = APValue((const FieldDecl*)nullptr);
@@ -8135,8 +8134,7 @@ class BufferToAPValueConverter {
81358134 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(RD))
81368135 NumBases = CXXRD->getNumBases();
81378136
8138- APValue ResultVal(APValue::UninitStruct(), NumBases,
8139- std::distance(RD->field_begin(), RD->field_end()));
8137+ APValue ResultVal(APValue::UninitStruct(), NumBases, RD->getNumFields());
81408138
81418139 // Visit the base classes.
81428140 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
@@ -11146,7 +11144,7 @@ static bool HandleClassZeroInitialization(EvalInfo &Info, const Expr *E,
1114611144 assert(!RD->isUnion() && "Expected non-union class type");
1114711145 const CXXRecordDecl *CD = dyn_cast<CXXRecordDecl>(RD);
1114811146 Result = APValue(APValue::UninitStruct(), CD ? CD->getNumBases() : 0,
11149- std::distance( RD->field_begin(), RD->field_end() ));
11147+ RD->getNumFields( ));
1115011148
1115111149 if (RD->isInvalidDecl()) return false;
1115211150 const ASTRecordLayout &Layout = Info.Ctx.getASTRecordLayout(RD);
@@ -11342,7 +11340,7 @@ bool RecordExprEvaluator::VisitCXXParenListOrInitListExpr(
1134211340
1134311341 if (!Result.hasValue())
1134411342 Result = APValue(APValue::UninitStruct(), CXXRD ? CXXRD->getNumBases() : 0,
11345- std::distance( RD->field_begin(), RD->field_end() ));
11343+ RD->getNumFields( ));
1134611344 unsigned ElementNo = 0;
1134711345 bool Success = true;
1134811346
@@ -11549,8 +11547,7 @@ bool RecordExprEvaluator::VisitLambdaExpr(const LambdaExpr *E) {
1154911547 if (ClosureClass->isInvalidDecl())
1155011548 return false;
1155111549
11552- const size_t NumFields =
11553- std::distance(ClosureClass->field_begin(), ClosureClass->field_end());
11550+ const size_t NumFields = ClosureClass->getNumFields();
1155411551
1155511552 assert(NumFields == (size_t)std::distance(E->capture_init_begin(),
1155611553 E->capture_init_end()) &&
0 commit comments