@@ -3879,6 +3879,13 @@ struct TargetCanonicalSpecializedMetadatasCachingOnceToken {
3879
3879
TargetRelativeDirectPointer<Runtime, swift_once_t , /* Nullable*/ false > token;
3880
3880
};
3881
3881
3882
+ template <typename Runtime>
3883
+ struct TargetSingletonMetadataPointer {
3884
+ TargetRelativeDirectPointer<Runtime, TargetMetadata<Runtime>,
3885
+ /* Nullable*/ false >
3886
+ metadata;
3887
+ };
3888
+
3882
3889
template <typename Runtime>
3883
3890
class swift_ptrauth_struct_context_descriptor (TypeContextDescriptor)
3884
3891
TargetTypeContextDescriptor : public TargetContextDescriptor<Runtime> {
@@ -3931,7 +3938,15 @@ class swift_ptrauth_struct_context_descriptor(TypeContextDescriptor)
3931
3938
}
3932
3939
3933
3940
bool hasCanonicalMetadataPrespecializations () const {
3934
- return getTypeContextDescriptorFlags ().hasCanonicalMetadataPrespecializations ();
3941
+ return this ->isGeneric () &&
3942
+ getTypeContextDescriptorFlags ()
3943
+ .hasCanonicalMetadataPrespecializationsOrSingletonMetadataPointer ();
3944
+ }
3945
+
3946
+ bool hasSingletonMetadataPointer () const {
3947
+ return !this ->isGeneric () &&
3948
+ getTypeContextDescriptorFlags ()
3949
+ .hasCanonicalMetadataPrespecializationsOrSingletonMetadataPointer ();
3935
3950
}
3936
3951
3937
3952
bool hasLayoutString () const {
@@ -4123,7 +4138,8 @@ class swift_ptrauth_struct_context_descriptor(ClassDescriptor)
4123
4138
TargetCanonicalSpecializedMetadatasListEntry<Runtime>,
4124
4139
TargetCanonicalSpecializedMetadataAccessorsListEntry<Runtime>,
4125
4140
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>,
4126
- InvertibleProtocolSet> {
4141
+ InvertibleProtocolSet,
4142
+ TargetSingletonMetadataPointer<Runtime>> {
4127
4143
private:
4128
4144
using TrailingGenericContextObjects =
4129
4145
swift::TrailingGenericContextObjects<TargetClassDescriptor<Runtime>,
@@ -4140,7 +4156,8 @@ class swift_ptrauth_struct_context_descriptor(ClassDescriptor)
4140
4156
TargetCanonicalSpecializedMetadatasListEntry<Runtime>,
4141
4157
TargetCanonicalSpecializedMetadataAccessorsListEntry<Runtime>,
4142
4158
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>,
4143
- InvertibleProtocolSet>;
4159
+ InvertibleProtocolSet,
4160
+ TargetSingletonMetadataPointer<Runtime>>;
4144
4161
4145
4162
using TrailingObjects =
4146
4163
typename TrailingGenericContextObjects::TrailingObjects;
@@ -4170,6 +4187,7 @@ class swift_ptrauth_struct_context_descriptor(ClassDescriptor)
4170
4187
TargetCanonicalSpecializedMetadataAccessorsListEntry<Runtime>;
4171
4188
using MetadataCachingOnceToken =
4172
4189
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>;
4190
+ using SingletonMetadataPointer = TargetSingletonMetadataPointer<Runtime>;
4173
4191
4174
4192
using StoredPointer = typename Runtime::StoredPointer;
4175
4193
using StoredPointerDifference = typename Runtime::StoredPointerDifference;
@@ -4311,6 +4329,10 @@ class swift_ptrauth_struct_context_descriptor(ClassDescriptor)
4311
4329
return this ->hasCanonicalMetadataPrespecializations () ? 1 : 0 ;
4312
4330
}
4313
4331
4332
+ size_t numTrailingObjects (OverloadToken<SingletonMetadataPointer>) const {
4333
+ return this ->hasSingletonMetadataPointer () ? 1 : 0 ;
4334
+ }
4335
+
4314
4336
public:
4315
4337
const TargetRelativeDirectPointer<Runtime, const void , /* nullable*/ true > &
4316
4338
getResilientSuperclass () const {
@@ -4490,6 +4512,14 @@ class swift_ptrauth_struct_context_descriptor(ClassDescriptor)
4490
4512
return box->token .get ();
4491
4513
}
4492
4514
4515
+ TargetMetadata<Runtime> *getSingletonMetadata () const {
4516
+ if (!this ->hasSingletonMetadataInitialization ())
4517
+ return nullptr ;
4518
+
4519
+ auto box = this ->template getTrailingObjects <SingletonMetadataPointer>();
4520
+ return box->token .get ();
4521
+ }
4522
+
4493
4523
// / Retrieve the set of protocols that are inverted by this type's
4494
4524
// / primary definition.
4495
4525
// /
@@ -4537,7 +4567,8 @@ class swift_ptrauth_struct_context_descriptor(StructDescriptor)
4537
4567
TargetCanonicalSpecializedMetadatasListCount<Runtime>,
4538
4568
TargetCanonicalSpecializedMetadatasListEntry<Runtime>,
4539
4569
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>,
4540
- InvertibleProtocolSet> {
4570
+ InvertibleProtocolSet,
4571
+ TargetSingletonMetadataPointer<Runtime>> {
4541
4572
public:
4542
4573
using ForeignMetadataInitialization =
4543
4574
TargetForeignMetadataInitialization<Runtime>;
@@ -4551,6 +4582,7 @@ class swift_ptrauth_struct_context_descriptor(StructDescriptor)
4551
4582
TargetCanonicalSpecializedMetadatasListEntry<Runtime>;
4552
4583
using MetadataCachingOnceToken =
4553
4584
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>;
4585
+ using SingletonMetadataPointer = TargetSingletonMetadataPointer<Runtime>;
4554
4586
4555
4587
private:
4556
4588
using TrailingGenericContextObjects =
@@ -4561,7 +4593,8 @@ class swift_ptrauth_struct_context_descriptor(StructDescriptor)
4561
4593
MetadataListCount,
4562
4594
MetadataListEntry,
4563
4595
MetadataCachingOnceToken,
4564
- InvertibleProtocolSet>;
4596
+ InvertibleProtocolSet,
4597
+ TargetSingletonMetadataPointer<Runtime>>;
4565
4598
4566
4599
using TrailingObjects =
4567
4600
typename TrailingGenericContextObjects::TrailingObjects;
@@ -4595,6 +4628,10 @@ class swift_ptrauth_struct_context_descriptor(StructDescriptor)
4595
4628
return this ->hasCanonicalMetadataPrespecializations () ? 1 : 0 ;
4596
4629
}
4597
4630
4631
+ size_t numTrailingObjects (OverloadToken<SingletonMetadataPointer>) const {
4632
+ return this ->hasSingletonMetadataPointer () ? 1 : 0 ;
4633
+ }
4634
+
4598
4635
public:
4599
4636
using TrailingGenericContextObjects::getGenericContext;
4600
4637
using TrailingGenericContextObjects::getGenericContextHeader;
@@ -4648,6 +4685,14 @@ class swift_ptrauth_struct_context_descriptor(StructDescriptor)
4648
4685
return box->token .get ();
4649
4686
}
4650
4687
4688
+ TargetMetadata<Runtime> *getSingletonMetadata () const {
4689
+ if (!this ->hasSingletonMetadataInitialization ())
4690
+ return nullptr ;
4691
+
4692
+ auto box = this ->template getTrailingObjects <SingletonMetadataPointer>();
4693
+ return box->token .get ();
4694
+ }
4695
+
4651
4696
// / Retrieve the set of protocols that are inverted by this type's
4652
4697
// / primary definition.
4653
4698
// /
@@ -4684,7 +4729,8 @@ class swift_ptrauth_struct_context_descriptor(EnumDescriptor)
4684
4729
TargetCanonicalSpecializedMetadatasListCount<Runtime>,
4685
4730
TargetCanonicalSpecializedMetadatasListEntry<Runtime>,
4686
4731
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>,
4687
- InvertibleProtocolSet> {
4732
+ InvertibleProtocolSet,
4733
+ TargetSingletonMetadataPointer<Runtime>> {
4688
4734
public:
4689
4735
using SingletonMetadataInitialization =
4690
4736
TargetSingletonMetadataInitialization<Runtime>;
@@ -4698,6 +4744,7 @@ class swift_ptrauth_struct_context_descriptor(EnumDescriptor)
4698
4744
TargetCanonicalSpecializedMetadatasListEntry<Runtime>;
4699
4745
using MetadataCachingOnceToken =
4700
4746
TargetCanonicalSpecializedMetadatasCachingOnceToken<Runtime>;
4747
+ using SingletonMetadataPointer = TargetSingletonMetadataPointer<Runtime>;
4701
4748
4702
4749
private:
4703
4750
using TrailingGenericContextObjects =
@@ -4708,7 +4755,8 @@ class swift_ptrauth_struct_context_descriptor(EnumDescriptor)
4708
4755
MetadataListCount,
4709
4756
MetadataListEntry,
4710
4757
MetadataCachingOnceToken,
4711
- InvertibleProtocolSet>;
4758
+ InvertibleProtocolSet,
4759
+ TargetSingletonMetadataPointer<Runtime>>;
4712
4760
4713
4761
using TrailingObjects =
4714
4762
typename TrailingGenericContextObjects::TrailingObjects;
@@ -4742,6 +4790,10 @@ class swift_ptrauth_struct_context_descriptor(EnumDescriptor)
4742
4790
return this ->hasCanonicalMetadataPrespecializations () ? 1 : 0 ;
4743
4791
}
4744
4792
4793
+ size_t numTrailingObjects (OverloadToken<SingletonMetadataPointer>) const {
4794
+ return this ->hasSingletonMetadataPointer () ? 1 : 0 ;
4795
+ }
4796
+
4745
4797
public:
4746
4798
using TrailingGenericContextObjects::getGenericContext;
4747
4799
using TrailingGenericContextObjects::getGenericContextHeader;
@@ -4809,6 +4861,14 @@ class swift_ptrauth_struct_context_descriptor(EnumDescriptor)
4809
4861
return box->token .get ();
4810
4862
}
4811
4863
4864
+ TargetMetadata<Runtime> *getSingletonMetadata () const {
4865
+ if (!this ->hasSingletonMetadataInitialization ())
4866
+ return nullptr ;
4867
+
4868
+ auto box = this ->template getTrailingObjects <SingletonMetadataPointer>();
4869
+ return box->token .get ();
4870
+ }
4871
+
4812
4872
// / Retrieve the set of protocols that are inverted by this type's
4813
4873
// / primary definition.
4814
4874
// /
0 commit comments