================
@@ -234,6 +234,89 @@ RValue CIRGenFunction::emitCXXMemberOrOperatorCall(
return emitCall(fnInfo, callee, returnValue, args, nullptr, loc);
}
+static void emitNullBaseClassInitialization(CIRGenFunction &cgf,
+ Address destPtr,
+ const CXXRecordDecl *base) {
+ if (base->isEmpty())
+ return;
+
+ cgf.cgm.errorNYI(base->getSourceRange(),
+ "emitNullBaseClassInitialization: not empty");
+}
+
+void CIRGenFunction::emitCXXConstructExpr(const CXXConstructExpr *e,
+ AggValueSlot dest) {
+ assert(!dest.isIgnored() && "Must have a destination!");
+ const CXXConstructorDecl *cd = e->getConstructor();
+
+ // If we require zero initialization before (or instead of) calling the
+ // constructor, as can be the case with a non-user-provided default
+ // constructor, emit the zero initialization now, unless destination is
+ // already zeroed.
+ if (e->requiresZeroInitialization() && !dest.isZeroed()) {
+ switch (e->getConstructionKind()) {
+ case CXXConstructionKind::Delegating:
+ case CXXConstructionKind::Complete:
+ emitNullInitialization(getLoc(e->getSourceRange()), dest.getAddress(),
+ e->getType());
+ break;
+ case CXXConstructionKind::VirtualBase:
+ case CXXConstructionKind::NonVirtualBase:
+ emitNullBaseClassInitialization(*this, dest.getAddress(),
+ cd->getParent());
----------------
andykaylor wrote:
This is the only changed code in this function.
https://github.com/llvm/llvm-project/pull/167023
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits