@@ -338,16 +338,18 @@ namespace {
338338
339339 if (auto cxxRecord = dyn_cast<clang::CXXRecordDecl>(ClangDecl)) {
340340 for (auto base : cxxRecord->bases ()) {
341- auto baseRecord = cast<clang::RecordType>(base.getType ())->getDecl ();
341+ auto baseType = base.getType ().getCanonicalType ();
342+
343+ auto baseRecord = cast<clang::RecordType>(baseType)->getDecl ();
342344 auto baseCxxRecord = cast<clang::CXXRecordDecl>(baseRecord);
343345
344346 if (baseCxxRecord->isEmpty ())
345347 continue ;
346348
347349 auto offset = layout.getBaseClassOffset (baseCxxRecord);
348350 auto size =
349- ClangDecl->getASTContext ().getTypeSizeInChars (base. getType () );
350- fn (base. getType () , offset, size);
351+ ClangDecl->getASTContext ().getTypeSizeInChars (baseType );
352+ fn (baseType , offset, size);
351353 }
352354 }
353355 }
@@ -458,8 +460,14 @@ namespace {
458460
459461 unsigned baseOffset = 0 ;
460462 if (auto cxxRecord = dyn_cast<clang::CXXRecordDecl>(ClangDecl)) {
461- baseOffset =
462- std::distance (cxxRecord->bases ().begin (), cxxRecord->bases ().end ());
463+ baseOffset = llvm::count_if (cxxRecord->bases (), [](auto base) {
464+ auto baseType = base.getType ().getCanonicalType ();
465+
466+ auto baseRecord = cast<clang::RecordType>(baseType)->getDecl ();
467+ auto baseCxxRecord = cast<clang::CXXRecordDecl>(baseRecord);
468+
469+ return !baseCxxRecord->isEmpty ();
470+ });
463471 }
464472
465473 // Otherwise, project from the base.
0 commit comments