@@ -127,6 +127,9 @@ class LinkEntity {
127
127
// This field appears in the TypeMetadata and ObjCResilientClassStub kinds.
128
128
MetadataAddressShift = 8 , MetadataAddressMask = 0x0300 ,
129
129
130
+ // This field appears in the TypeMetadata kind.
131
+ ForceSharedShift = 12 , ForceSharedMask = 0x1000 ,
132
+
130
133
// This field appears in associated type access functions.
131
134
AssociatedTypeIndexShift = 8 , AssociatedTypeIndexMask = ~KindMask,
132
135
@@ -847,12 +850,14 @@ class LinkEntity {
847
850
}
848
851
849
852
static LinkEntity forTypeMetadata (CanType concreteType,
850
- TypeMetadataAddress addr) {
853
+ TypeMetadataAddress addr,
854
+ bool forceShared = false ) {
851
855
assert (!isObjCImplementation (concreteType));
852
856
assert (!isEmbedded (concreteType) || isMetadataAllowedInEmbedded (concreteType));
853
857
LinkEntity entity;
854
858
entity.setForType (Kind::TypeMetadata, concreteType);
855
859
entity.Data |= LINKENTITY_SET_FIELD (MetadataAddress, unsigned (addr));
860
+ entity.Data |= LINKENTITY_SET_FIELD (ForceShared, unsigned (forceShared));
856
861
return entity;
857
862
}
858
863
@@ -1584,6 +1589,10 @@ class LinkEntity {
1584
1589
getKind () == Kind::ObjCResilientClassStub);
1585
1590
return (TypeMetadataAddress)LINKENTITY_GET_FIELD (Data, MetadataAddress);
1586
1591
}
1592
+ bool isForcedShared () const {
1593
+ assert (getKind () == Kind::TypeMetadata);
1594
+ return (bool )LINKENTITY_GET_FIELD (Data, ForceShared);
1595
+ }
1587
1596
bool isObjCClassRef () const {
1588
1597
return getKind () == Kind::ObjCClassRef;
1589
1598
}
0 commit comments