@@ -734,6 +734,52 @@ namespace {
734734 isOutlined);
735735 }
736736
737+ void assignWithCopy (IRGenFunction &IGF, Address destAddr, Address srcAddr,
738+ SILType T, bool isOutlined) const override {
739+ if (auto copyConstructor = findCopyConstructor ()) {
740+ emitCopyWithCopyConstructor (IGF, T, copyConstructor,
741+ srcAddr.getAddress (),
742+ destAddr.getAddress ());
743+ return ;
744+ }
745+ StructTypeInfoBase<AddressOnlyClangRecordTypeInfo, FixedTypeInfo,
746+ ClangFieldInfo>::assignWithCopy (IGF, destAddr,
747+ srcAddr, T,
748+ isOutlined);
749+ }
750+
751+ void initializeWithTake (IRGenFunction &IGF, Address dest, Address src,
752+ SILType T, bool isOutlined) const override {
753+ if (auto copyConstructor = findCopyConstructor ()) {
754+ emitCopyWithCopyConstructor (IGF, T, copyConstructor,
755+ src.getAddress (),
756+ dest.getAddress ());
757+ destroy (IGF, src, T, isOutlined);
758+ return ;
759+ }
760+
761+ StructTypeInfoBase<AddressOnlyClangRecordTypeInfo, FixedTypeInfo,
762+ ClangFieldInfo>::initializeWithTake (IGF, dest,
763+ src, T,
764+ isOutlined);
765+ }
766+
767+ void assignWithTake (IRGenFunction &IGF, Address dest, Address src, SILType T,
768+ bool isOutlined) const override {
769+ if (auto copyConstructor = findCopyConstructor ()) {
770+ emitCopyWithCopyConstructor (IGF, T, copyConstructor,
771+ src.getAddress (),
772+ dest.getAddress ());
773+ destroy (IGF, src, T, isOutlined);
774+ return ;
775+ }
776+
777+ StructTypeInfoBase<AddressOnlyClangRecordTypeInfo, FixedTypeInfo,
778+ ClangFieldInfo>::assignWithTake (IGF, dest,
779+ src, T,
780+ isOutlined);
781+ }
782+
737783 llvm::NoneType getNonFixedOffsets (IRGenFunction &IGF) const { return None; }
738784 llvm::NoneType getNonFixedOffsets (IRGenFunction &IGF, SILType T) const {
739785 return None;
0 commit comments