@@ -550,6 +550,28 @@ std::string LinkEntity::mangleAsString(ASTContext &Ctx) const {
550550 return mangler.mangleExtendedExistentialTypeShapeSymbol (
551551 genSig, existentialType, isUnique);
552552 }
553+ case Kind::CoroFunctionPointer:
554+ case Kind::DispatchThunkCoroFunctionPointer:
555+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
556+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
557+ case Kind::PartialApplyForwarderCoroFunctionPointer:
558+ case Kind::DistributedAccessorCoroFunctionPointer: {
559+ std::string Result (
560+ getUnderlyingEntityForCoroFunctionPointer ().mangleAsString (Ctx));
561+ Result.append (" Tv" );
562+ return Result;
563+ }
564+ case Kind::DistributedThunkCoroFunctionPointer: {
565+ std::string Result = getSILDeclRef ().mangle ();
566+ Result.append (" TE" );
567+ Result.append (" Tv" );
568+ return Result;
569+ }
570+ case Kind::CoroFunctionPointerAST: {
571+ std::string Result = getSILDeclRef ().mangle ();
572+ Result.append (" Tv" );
573+ return Result;
574+ }
553575 }
554576 llvm_unreachable (" bad entity kind!" );
555577}
@@ -907,6 +929,17 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
907929 case Kind::ExtendedExistentialTypeShape:
908930 return (isExtendedExistentialTypeShapeShared ()
909931 ? SILLinkage::Shared : SILLinkage::Private);
932+ case Kind::CoroFunctionPointer:
933+ case Kind::DispatchThunkCoroFunctionPointer:
934+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
935+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
936+ case Kind::PartialApplyForwarderCoroFunctionPointer:
937+ case Kind::DistributedAccessorCoroFunctionPointer:
938+ return getUnderlyingEntityForCoroFunctionPointer ().getLinkage (
939+ forDefinition);
940+ case Kind::CoroFunctionPointerAST:
941+ case Kind::DistributedThunkCoroFunctionPointer:
942+ return getSILLinkage (getDeclLinkage (getDecl ()), forDefinition);
910943 }
911944 llvm_unreachable (" bad link entity kind" );
912945}
@@ -1001,6 +1034,14 @@ bool LinkEntity::isContextDescriptor() const {
10011034 case Kind::DistributedAccessor:
10021035 case Kind::AccessibleFunctionRecord:
10031036 case Kind::ExtendedExistentialTypeShape:
1037+ case Kind::CoroFunctionPointer:
1038+ case Kind::DispatchThunkCoroFunctionPointer:
1039+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1040+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1041+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1042+ case Kind::DistributedAccessorCoroFunctionPointer:
1043+ case Kind::CoroFunctionPointerAST:
1044+ case Kind::DistributedThunkCoroFunctionPointer:
10041045 return false ;
10051046 }
10061047 llvm_unreachable (" invalid descriptor" );
@@ -1128,6 +1169,15 @@ llvm::Type *LinkEntity::getDefaultDeclarationType(IRGenModule &IGM) const {
11281169 return IGM.AccessibleFunctionRecordTy ;
11291170 case Kind::ExtendedExistentialTypeShape:
11301171 return IGM.RelativeAddressTy ;
1172+ case Kind::CoroFunctionPointer:
1173+ case Kind::DispatchThunkCoroFunctionPointer:
1174+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1175+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1176+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1177+ case Kind::DistributedAccessorCoroFunctionPointer:
1178+ case Kind::CoroFunctionPointerAST:
1179+ case Kind::DistributedThunkCoroFunctionPointer:
1180+ return IGM.CoroFunctionPointerPtrTy ;
11311181 default :
11321182 llvm_unreachable (" declaration LLVM type not specified" );
11331183 }
@@ -1196,6 +1246,14 @@ Alignment LinkEntity::getAlignment(IRGenModule &IGM) const {
11961246 case Kind::NoncanonicalSpecializedGenericTypeMetadata:
11971247 case Kind::NoncanonicalSpecializedGenericTypeMetadataCacheVariable:
11981248 case Kind::PartialApplyForwarder:
1249+ case Kind::CoroFunctionPointer:
1250+ case Kind::DispatchThunkCoroFunctionPointer:
1251+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1252+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1253+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1254+ case Kind::DistributedAccessorCoroFunctionPointer:
1255+ case Kind::CoroFunctionPointerAST:
1256+ case Kind::DistributedThunkCoroFunctionPointer:
11991257 return IGM.getPointerAlignment ();
12001258 case Kind::CanonicalPrespecializedGenericTypeCachingOnceToken:
12011259 case Kind::TypeMetadataDemanglingCacheVariable:
@@ -1244,6 +1302,9 @@ bool LinkEntity::isText() const {
12441302 case Kind::AsyncFunctionPointerAST:
12451303 case Kind::ProtocolWitnessTable:
12461304 case Kind::TypeMetadata:
1305+ case Kind::DispatchThunkCoroFunctionPointer:
1306+ case Kind::DistributedThunkCoroFunctionPointer:
1307+ case Kind::CoroFunctionPointerAST:
12471308 return false ;
12481309 // The following cases do not currently generate linkable symbols
12491310 // through TBDGen. The full enumeration is captured to ensure
@@ -1303,6 +1364,11 @@ bool LinkEntity::isText() const {
13031364 case Kind::CanonicalSpecializedGenericSwiftMetaclassStub:
13041365 case Kind::NoncanonicalSpecializedGenericTypeMetadata:
13051366 case Kind::AccessibleFunctionRecord:
1367+ case Kind::CoroFunctionPointer:
1368+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1369+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1370+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1371+ case Kind::DistributedAccessorCoroFunctionPointer:
13061372 return false ;
13071373 }
13081374}
@@ -1358,6 +1424,8 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
13581424
13591425 case Kind::AsyncFunctionPointerAST:
13601426 case Kind::DistributedThunkAsyncFunctionPointer:
1427+ case Kind::CoroFunctionPointerAST:
1428+ case Kind::DistributedThunkCoroFunctionPointer:
13611429 case Kind::DispatchThunk:
13621430 case Kind::DispatchThunkDerivative:
13631431 case Kind::DispatchThunkInitializer:
@@ -1450,13 +1518,21 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
14501518 case Kind::DistributedAccessorAsyncPointer:
14511519 return getUnderlyingEntityForAsyncFunctionPointer ()
14521520 .isWeakImported (module );
1453- case Kind::KnownAsyncFunctionPointer:
1521+ case Kind::KnownAsyncFunctionPointer: {
14541522 auto &context = module ->getASTContext ();
14551523 auto deploymentAvailability =
14561524 AvailabilityRange::forDeploymentTarget (context);
14571525 return !deploymentAvailability.isContainedIn (
14581526 context.getConcurrencyAvailability ());
14591527 }
1528+ case Kind::CoroFunctionPointer:
1529+ case Kind::DispatchThunkCoroFunctionPointer:
1530+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1531+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1532+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1533+ case Kind::DistributedAccessorCoroFunctionPointer:
1534+ return getUnderlyingEntityForCoroFunctionPointer ().isWeakImported (module );
1535+ }
14601536
14611537 llvm_unreachable (" Bad link entity kind" );
14621538}
@@ -1465,6 +1541,8 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
14651541 switch (getKind ()) {
14661542 case Kind::AsyncFunctionPointerAST:
14671543 case Kind::DistributedThunkAsyncFunctionPointer:
1544+ case Kind::CoroFunctionPointerAST:
1545+ case Kind::DistributedThunkCoroFunctionPointer:
14681546 case Kind::DispatchThunk:
14691547 case Kind::DispatchThunkDerivative:
14701548 case Kind::DispatchThunkInitializer:
@@ -1585,6 +1663,14 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
15851663
15861664 case Kind::AccessibleFunctionRecord: {
15871665 return getSILFunction ()->getParentModule ();
1666+ case Kind::CoroFunctionPointer:
1667+ case Kind::DispatchThunkCoroFunctionPointer:
1668+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1669+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1670+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1671+ case Kind::DistributedAccessorCoroFunctionPointer:
1672+ return getUnderlyingEntityForCoroFunctionPointer ()
1673+ .getDeclContextForEmission ();
15881674 }
15891675 }
15901676 llvm_unreachable (" invalid decl kind" );
0 commit comments