@@ -127,6 +127,9 @@ class LinkEntity {
127127 // This field appears in the TypeMetadata and ObjCResilientClassStub kinds.
128128 MetadataAddressShift = 8 , MetadataAddressMask = 0x0300 ,
129129
130+ // This field appears in the TypeMetadata kind.
131+ ForceSharedShift = 12 , ForceSharedMask = 0x1000 ,
132+
130133 // This field appears in associated type access functions.
131134 AssociatedTypeIndexShift = 8 , AssociatedTypeIndexMask = ~KindMask,
132135
@@ -847,12 +850,14 @@ class LinkEntity {
847850 }
848851
849852 static LinkEntity forTypeMetadata (CanType concreteType,
850- TypeMetadataAddress addr) {
853+ TypeMetadataAddress addr,
854+ bool forceShared = false ) {
851855 assert (!isObjCImplementation (concreteType));
852856 assert (!isEmbedded (concreteType) || isMetadataAllowedInEmbedded (concreteType));
853857 LinkEntity entity;
854858 entity.setForType (Kind::TypeMetadata, concreteType);
855859 entity.Data |= LINKENTITY_SET_FIELD (MetadataAddress, unsigned (addr));
860+ entity.Data |= LINKENTITY_SET_FIELD (ForceShared, unsigned (forceShared));
856861 return entity;
857862 }
858863
@@ -1584,6 +1589,10 @@ class LinkEntity {
15841589 getKind () == Kind::ObjCResilientClassStub);
15851590 return (TypeMetadataAddress)LINKENTITY_GET_FIELD (Data, MetadataAddress);
15861591 }
1592+ bool isForcedShared () const {
1593+ assert (getKind () == Kind::TypeMetadata);
1594+ return (bool )LINKENTITY_GET_FIELD (Data, ForceShared);
1595+ }
15871596 bool isObjCClassRef () const {
15881597 return getKind () == Kind::ObjCClassRef;
15891598 }
0 commit comments