[Distributed] Handle mangling thunks in extensions with generic AS and $Stubs (#71914)

This commit is contained in:
Konrad `ktoso` Malawski
2024-02-29 21:22:00 +09:00
committed by GitHub
parent 92f3b0f2c4
commit c56a1e8be7
29 changed files with 565 additions and 296 deletions

View File

@@ -524,15 +524,19 @@ std::string LinkEntity::mangleAsString() const {
}
case Kind::AccessibleFunctionRecord: {
auto DC = getSILFunction()->getDeclContext();
auto thunk = dyn_cast<AbstractFunctionDecl>(DC);
if (thunk && thunk->isDistributedThunk()) {
ASTMangler mangler;
return mangler.mangleDistributedThunkRecord(thunk);
}
// Otherwise use the default mangling: just the function name
std::string Result(getSILFunction()->getName());
Result.append("HF");
return Result;
}
case Kind::AccessibleProtocolRequirementFunctionRecord: {
std::string Result(getSILFunction()->getName());
Result.append("HpF");
return Result;
}
case Kind::ExtendedExistentialTypeShape: {
auto genSig = getExtendedExistentialTypeShapeGenSig();
@@ -888,7 +892,6 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
return SILLinkage::Private;
case Kind::DistributedAccessor:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord:
return SILLinkage::Shared;
case Kind::ExtendedExistentialTypeShape:
return (isExtendedExistentialTypeShapeShared()
@@ -986,7 +989,6 @@ bool LinkEntity::isContextDescriptor() const {
case Kind::KnownAsyncFunctionPointer:
case Kind::DistributedAccessor:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord:
case Kind::ExtendedExistentialTypeShape:
return false;
}
@@ -1113,8 +1115,6 @@ llvm::Type *LinkEntity::getDefaultDeclarationType(IRGenModule &IGM) const {
return IGM.FunctionPtrTy;
case Kind::AccessibleFunctionRecord:
return IGM.AccessibleFunctionRecordTy;
case Kind::AccessibleProtocolRequirementFunctionRecord:
return IGM.AccessibleProtocolRequirementFunctionRecordTy;
case Kind::ExtendedExistentialTypeShape:
return IGM.RelativeAddressTy;
default:
@@ -1148,7 +1148,6 @@ Alignment LinkEntity::getAlignment(IRGenModule &IGM) const {
case Kind::OpaqueTypeDescriptor:
case Kind::OpaqueTypeDescriptorRecord:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord:
case Kind::ExtendedExistentialTypeShape:
return Alignment(4);
case Kind::AsyncFunctionPointer:
@@ -1293,7 +1292,6 @@ bool LinkEntity::isText() const {
case Kind::CanonicalSpecializedGenericSwiftMetaclassStub:
case Kind::NoncanonicalSpecializedGenericTypeMetadata:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord:
return false;
}
}
@@ -1414,7 +1412,6 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
case Kind::CoroutineContinuationPrototype:
case Kind::DifferentiabilityWitness:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord:
case Kind::ExtendedExistentialTypeShape:
return false;
@@ -1559,8 +1556,7 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
.getDeclContextForEmission();
case Kind::DistributedAccessor:
case Kind::AccessibleFunctionRecord:
case Kind::AccessibleProtocolRequirementFunctionRecord: {
case Kind::AccessibleFunctionRecord: {
return getSILFunction()->getParentModule();
}
}