================ @@ -53,19 +53,135 @@ bool CIRGenFunction::isConstructorDelegationValid( return true; } +static void emitLValueForAnyFieldInitialization(CIRGenFunction &cgf, + CXXCtorInitializer *memberInit, + LValue &lhs) { + FieldDecl *field = memberInit->getAnyMember(); + if (memberInit->isIndirectMemberInitializer()) { + // If we are initializing an anonymous union field, drill down to the field. + IndirectFieldDecl *indirectField = memberInit->getIndirectMember(); + for (const auto *nd : indirectField->chain()) { + auto *fd = cast<clang::FieldDecl>(nd); + lhs = cgf.emitLValueForFieldInitialization(lhs, fd, fd->getName()); + } + } else { + lhs = cgf.emitLValueForFieldInitialization(lhs, field, field->getName()); + } +} + +static void emitMemberInitializer(CIRGenFunction &cgf, + const CXXRecordDecl *classDecl, + CXXCtorInitializer *memberInit, + const CXXConstructorDecl *constructor, + FunctionArgList &args) { + assert(memberInit->isAnyMemberInitializer() && + "Mush have member initializer!"); + assert(memberInit->getInit() && "Must have initializer!"); + + assert(!cir::MissingFeatures::generateDebugInfo()); + + // non-static data member initializers + FieldDecl *field = memberInit->getAnyMember(); + QualType fieldType = field->getType(); + + mlir::Value thisPtr = cgf.loadCXXThis(); + QualType recordTy = cgf.getContext().getTypeDeclType(classDecl); + LValue lhs; ---------------- bcardosolopes wrote:
seems like init below could be a ternary init here? https://github.com/llvm/llvm-project/pull/144583 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits