@@ -550,6 +550,28 @@ std::string LinkEntity::mangleAsString(ASTContext &Ctx) const {
550
550
return mangler.mangleExtendedExistentialTypeShapeSymbol (
551
551
genSig, existentialType, isUnique);
552
552
}
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
+ }
553
575
}
554
576
llvm_unreachable (" bad entity kind!" );
555
577
}
@@ -907,6 +929,17 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
907
929
case Kind::ExtendedExistentialTypeShape:
908
930
return (isExtendedExistentialTypeShapeShared ()
909
931
? 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);
910
943
}
911
944
llvm_unreachable (" bad link entity kind" );
912
945
}
@@ -1001,6 +1034,14 @@ bool LinkEntity::isContextDescriptor() const {
1001
1034
case Kind::DistributedAccessor:
1002
1035
case Kind::AccessibleFunctionRecord:
1003
1036
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:
1004
1045
return false ;
1005
1046
}
1006
1047
llvm_unreachable (" invalid descriptor" );
@@ -1128,6 +1169,15 @@ llvm::Type *LinkEntity::getDefaultDeclarationType(IRGenModule &IGM) const {
1128
1169
return IGM.AccessibleFunctionRecordTy ;
1129
1170
case Kind::ExtendedExistentialTypeShape:
1130
1171
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 ;
1131
1181
default :
1132
1182
llvm_unreachable (" declaration LLVM type not specified" );
1133
1183
}
@@ -1196,6 +1246,14 @@ Alignment LinkEntity::getAlignment(IRGenModule &IGM) const {
1196
1246
case Kind::NoncanonicalSpecializedGenericTypeMetadata:
1197
1247
case Kind::NoncanonicalSpecializedGenericTypeMetadataCacheVariable:
1198
1248
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:
1199
1257
return IGM.getPointerAlignment ();
1200
1258
case Kind::CanonicalPrespecializedGenericTypeCachingOnceToken:
1201
1259
case Kind::TypeMetadataDemanglingCacheVariable:
@@ -1244,6 +1302,9 @@ bool LinkEntity::isText() const {
1244
1302
case Kind::AsyncFunctionPointerAST:
1245
1303
case Kind::ProtocolWitnessTable:
1246
1304
case Kind::TypeMetadata:
1305
+ case Kind::DispatchThunkCoroFunctionPointer:
1306
+ case Kind::DistributedThunkCoroFunctionPointer:
1307
+ case Kind::CoroFunctionPointerAST:
1247
1308
return false ;
1248
1309
// The following cases do not currently generate linkable symbols
1249
1310
// through TBDGen. The full enumeration is captured to ensure
@@ -1303,6 +1364,11 @@ bool LinkEntity::isText() const {
1303
1364
case Kind::CanonicalSpecializedGenericSwiftMetaclassStub:
1304
1365
case Kind::NoncanonicalSpecializedGenericTypeMetadata:
1305
1366
case Kind::AccessibleFunctionRecord:
1367
+ case Kind::CoroFunctionPointer:
1368
+ case Kind::DispatchThunkInitializerCoroFunctionPointer:
1369
+ case Kind::DispatchThunkAllocatorCoroFunctionPointer:
1370
+ case Kind::PartialApplyForwarderCoroFunctionPointer:
1371
+ case Kind::DistributedAccessorCoroFunctionPointer:
1306
1372
return false ;
1307
1373
}
1308
1374
}
@@ -1358,6 +1424,8 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
1358
1424
1359
1425
case Kind::AsyncFunctionPointerAST:
1360
1426
case Kind::DistributedThunkAsyncFunctionPointer:
1427
+ case Kind::CoroFunctionPointerAST:
1428
+ case Kind::DistributedThunkCoroFunctionPointer:
1361
1429
case Kind::DispatchThunk:
1362
1430
case Kind::DispatchThunkDerivative:
1363
1431
case Kind::DispatchThunkInitializer:
@@ -1450,13 +1518,21 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
1450
1518
case Kind::DistributedAccessorAsyncPointer:
1451
1519
return getUnderlyingEntityForAsyncFunctionPointer ()
1452
1520
.isWeakImported (module );
1453
- case Kind::KnownAsyncFunctionPointer:
1521
+ case Kind::KnownAsyncFunctionPointer: {
1454
1522
auto &context = module ->getASTContext ();
1455
1523
auto deploymentAvailability =
1456
1524
AvailabilityRange::forDeploymentTarget (context);
1457
1525
return !deploymentAvailability.isContainedIn (
1458
1526
context.getConcurrencyAvailability ());
1459
1527
}
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
+ }
1460
1536
1461
1537
llvm_unreachable (" Bad link entity kind" );
1462
1538
}
@@ -1465,6 +1541,8 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
1465
1541
switch (getKind ()) {
1466
1542
case Kind::AsyncFunctionPointerAST:
1467
1543
case Kind::DistributedThunkAsyncFunctionPointer:
1544
+ case Kind::CoroFunctionPointerAST:
1545
+ case Kind::DistributedThunkCoroFunctionPointer:
1468
1546
case Kind::DispatchThunk:
1469
1547
case Kind::DispatchThunkDerivative:
1470
1548
case Kind::DispatchThunkInitializer:
@@ -1585,6 +1663,14 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
1585
1663
1586
1664
case Kind::AccessibleFunctionRecord: {
1587
1665
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 ();
1588
1674
}
1589
1675
}
1590
1676
llvm_unreachable (" invalid decl kind" );
0 commit comments