@@ -1267,9 +1267,8 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
12671267 return;
12681268 }
12691269#endif
1270-
1271- AggValueSlot Dest = EnsureSlot (CGF.getLoc (ExprToVisit->getSourceRange ()),
1272- ExprToVisit->getType ());
1270+ const mlir::Location loc = CGF.getLoc (ExprToVisit->getSourceRange ());
1271+ AggValueSlot Dest = EnsureSlot (loc, ExprToVisit->getType ());
12731272
12741273 LValue DestLV = CGF.makeAddrLValue (Dest.getAddress (), ExprToVisit->getType ());
12751274
@@ -1309,8 +1308,20 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
13091308 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(record)) {
13101309 assert (NumInitElements >= CXXRD->getNumBases () &&
13111310 " missing initializer for base class" );
1312- for ([[maybe_unused]] auto &Base : CXXRD->bases ()) {
1313- llvm_unreachable (" NYI" );
1311+ for (auto &Base : CXXRD->bases ()) {
1312+ assert (!Base.isVirtual () && " should not see vbases here" );
1313+ auto *BaseRD = Base.getType ()->getAsCXXRecordDecl ();
1314+ Address address = CGF.getAddressOfDirectBaseInCompleteClass (
1315+ loc, Dest.getAddress (), CXXRD, BaseRD,
1316+ /* isBaseVirtual*/ false );
1317+ AggValueSlot aggSlot = AggValueSlot::forAddr (
1318+ address, Qualifiers (), AggValueSlot::IsDestructed,
1319+ AggValueSlot::DoesNotNeedGCBarriers, AggValueSlot::IsNotAliased,
1320+ CGF.getOverlapForBaseInit (CXXRD, BaseRD, false ));
1321+ CGF.emitAggExpr (InitExprs[curInitIndex++], aggSlot);
1322+ if (QualType::DestructionKind dtorKind =
1323+ Base.getType ().isDestructedType ())
1324+ CGF.pushDestroyAndDeferDeactivation (dtorKind, address, Base.getType ());
13141325 }
13151326 }
13161327
@@ -1344,8 +1355,7 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
13441355 emitInitializationToLValue (InitExprs[0 ], FieldLoc);
13451356 } else {
13461357 // Default-initialize to null.
1347- emitNullInitializationToLValue (CGF.getLoc (ExprToVisit->getSourceRange ()),
1348- FieldLoc);
1358+ emitNullInitializationToLValue (loc, FieldLoc);
13491359 }
13501360
13511361 return ;
0 commit comments