@@ -1252,9 +1252,8 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
12521252 return;
12531253 }
12541254#endif
1255-
1256- AggValueSlot Dest = EnsureSlot (CGF.getLoc (ExprToVisit->getSourceRange ()),
1257- ExprToVisit->getType ());
1255+ const mlir::Location loc = CGF.getLoc (ExprToVisit->getSourceRange ());
1256+ AggValueSlot Dest = EnsureSlot (loc, ExprToVisit->getType ());
12581257
12591258 LValue DestLV = CGF.makeAddrLValue (Dest.getAddress (), ExprToVisit->getType ());
12601259
@@ -1294,8 +1293,20 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
12941293 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(record)) {
12951294 assert (NumInitElements >= CXXRD->getNumBases () &&
12961295 " missing initializer for base class" );
1297- for ([[maybe_unused]] auto &Base : CXXRD->bases ()) {
1298- llvm_unreachable (" NYI" );
1296+ for (auto &Base : CXXRD->bases ()) {
1297+ assert (!Base.isVirtual () && " should not see vbases here" );
1298+ auto *BaseRD = Base.getType ()->getAsCXXRecordDecl ();
1299+ Address address = CGF.getAddressOfDirectBaseInCompleteClass (
1300+ loc, Dest.getAddress (), CXXRD, BaseRD,
1301+ /* isBaseVirtual*/ false );
1302+ AggValueSlot aggSlot = AggValueSlot::forAddr (
1303+ address, Qualifiers (), AggValueSlot::IsDestructed,
1304+ AggValueSlot::DoesNotNeedGCBarriers, AggValueSlot::IsNotAliased,
1305+ CGF.getOverlapForBaseInit (CXXRD, BaseRD, false ));
1306+ CGF.emitAggExpr (InitExprs[curInitIndex++], aggSlot);
1307+ if (QualType::DestructionKind dtorKind =
1308+ Base.getType ().isDestructedType ())
1309+ CGF.pushDestroyAndDeferDeactivation (dtorKind, address, Base.getType ());
12991310 }
13001311 }
13011312
@@ -1329,8 +1340,7 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
13291340 emitInitializationToLValue (InitExprs[0 ], FieldLoc);
13301341 } else {
13311342 // Default-initialize to null.
1332- emitNullInitializationToLValue (CGF.getLoc (ExprToVisit->getSourceRange ()),
1333- FieldLoc);
1343+ emitNullInitializationToLValue (loc, FieldLoc);
13341344 }
13351345
13361346 return ;
0 commit comments