@@ -423,12 +423,11 @@ void irgen::emitDeallocatePartialClassInstance(IRGenFunction &IGF,
423423
424424// / Create the destructor function for a layout.
425425// / TODO: give this some reasonable name and possibly linkage.
426- static llvm::Function *createDtorFn (IRGenModule &IGM,
427- const HeapLayout &layout) {
428- llvm::Function *fn =
429- llvm::Function::Create (IGM.DeallocatingDtorTy ,
430- llvm::Function::PrivateLinkage,
431- " objectdestroy" , &IGM.Module );
426+ static llvm::Function *createDtorFn (IRGenModule &IGM, const HeapLayout &layout,
427+ const llvm::Twine &layoutName) {
428+ llvm::Function *fn = llvm::Function::Create (
429+ IGM.DeallocatingDtorTy , llvm::Function::InternalLinkage,
430+ " __swift_" + layoutName + " _destructor" , &IGM.Module );
432431 auto attrs = IGM.constructInitialAttributes ();
433432 IGM.addSwiftSelfAttributes (attrs, 0 );
434433 fn->setAttributes (attrs);
@@ -556,11 +555,12 @@ static llvm::Constant *buildPrivateMetadata(IRGenModule &IGM,
556555
557556llvm::Constant *
558557HeapLayout::getPrivateMetadata (IRGenModule &IGM,
559- llvm::Constant *captureDescriptor) const {
558+ llvm::Constant *captureDescriptor,
559+ const llvm::Twine &name) const {
560560 if (!privateMetadata)
561- privateMetadata = buildPrivateMetadata (IGM, * this , createDtorFn (IGM, * this ),
562- captureDescriptor,
563- MetadataKind::HeapLocalVariable);
561+ privateMetadata = buildPrivateMetadata (
562+ IGM, * this , createDtorFn (IGM, * this , name), captureDescriptor,
563+ MetadataKind::HeapLocalVariable);
564564 return privateMetadata;
565565}
566566
@@ -573,7 +573,8 @@ llvm::Value *IRGenFunction::emitUnmanagedAlloc(const HeapLayout &layout,
573573 return IGM.RefCountedNull ;
574574 }
575575
576- llvm::Value *metadata = layout.getPrivateMetadata (IGM, captureDescriptor);
576+ llvm::Value *metadata =
577+ layout.getPrivateMetadata (IGM, captureDescriptor, name);
577578 llvm::Value *size, *alignMask;
578579 if (offsets) {
579580 size = offsets->getSize ();
0 commit comments