diff options
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 2a49627..79c92bd 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2123,7 +2123,9 @@ void InitListChecker::CheckStructUnionTypes( // worthwhile to skip over the rest of the initializer, though. RecordDecl *RD = DeclType->castAs<RecordType>()->getDecl(); RecordDecl::field_iterator FieldEnd = RD->field_end(); - size_t NumRecordFields = std::distance(RD->field_begin(), RD->field_end()); + size_t NumRecordDecls = llvm::count_if(RD->decls(), [&](const Decl *D) { + return isa<FieldDecl>(D) || isa<RecordDecl>(D); + }); bool CheckForMissingFields = !IList->isIdiomaticZeroInitializer(SemaRef.getLangOpts()); bool HasDesignatedInit = false; @@ -2186,7 +2188,7 @@ void InitListChecker::CheckStructUnionTypes( // struct foo h = {bar}; auto IsZeroInitializer = [&](const Expr *I) { if (IList->getNumInits() == 1) { - if (NumRecordFields == 1) + if (NumRecordDecls == 1) return true; if (const auto *IL = dyn_cast<IntegerLiteral>(I)) return IL->getValue().isZero(); |