@@ -85,6 +85,18 @@ enum class TypeMetadataAddress {
85
85
FullMetadata,
86
86
};
87
87
88
+ inline bool isEmbedded (CanType t) {
89
+ return t->getASTContext ().LangOpts .hasFeature (Feature::Embedded);
90
+ }
91
+
92
+ inline bool isEmbedded (Decl *d) {
93
+ return d->getASTContext ().LangOpts .hasFeature (Feature::Embedded);
94
+ }
95
+
96
+ inline bool isEmbedded (const ProtocolConformance *c) {
97
+ return c->getType ()->getASTContext ().LangOpts .hasFeature (Feature::Embedded);
98
+ }
99
+
88
100
// / A link entity is some sort of named declaration, combined with all
89
101
// / the information necessary to distinguish specific implementations
90
102
// / of the declaration from each other.
@@ -828,13 +840,15 @@ class LinkEntity {
828
840
static LinkEntity forTypeMetadata (CanType concreteType,
829
841
TypeMetadataAddress addr) {
830
842
assert (!isObjCImplementation (concreteType));
843
+ assert (!isEmbedded (concreteType));
831
844
LinkEntity entity;
832
845
entity.setForType (Kind::TypeMetadata, concreteType);
833
846
entity.Data |= LINKENTITY_SET_FIELD (MetadataAddress, unsigned (addr));
834
847
return entity;
835
848
}
836
849
837
850
static LinkEntity forTypeMetadataPattern (NominalTypeDecl *decl) {
851
+ assert (!isEmbedded (decl));
838
852
LinkEntity entity;
839
853
entity.setForDecl (Kind::TypeMetadataPattern, decl);
840
854
return entity;
@@ -891,25 +905,29 @@ class LinkEntity {
891
905
892
906
static LinkEntity forNominalTypeDescriptor (NominalTypeDecl *decl) {
893
907
assert (!isObjCImplementation (decl));
908
+ assert (!isEmbedded (decl));
894
909
LinkEntity entity;
895
910
entity.setForDecl (Kind::NominalTypeDescriptor, decl);
896
911
return entity;
897
912
}
898
913
899
914
static LinkEntity forNominalTypeDescriptorRecord (NominalTypeDecl *decl) {
900
915
assert (!isObjCImplementation (decl));
916
+ assert (!isEmbedded (decl));
901
917
LinkEntity entity;
902
918
entity.setForDecl (Kind::NominalTypeDescriptorRecord, decl);
903
919
return entity;
904
920
}
905
921
906
922
static LinkEntity forOpaqueTypeDescriptor (OpaqueTypeDecl *decl) {
923
+ assert (!isEmbedded (decl));
907
924
LinkEntity entity;
908
925
entity.setForDecl (Kind::OpaqueTypeDescriptor, decl);
909
926
return entity;
910
927
}
911
928
912
929
static LinkEntity forOpaqueTypeDescriptorRecord (OpaqueTypeDecl *decl) {
930
+ assert (!isEmbedded (decl));
913
931
LinkEntity entity;
914
932
entity.setForDecl (Kind::OpaqueTypeDescriptorRecord, decl);
915
933
return entity;
@@ -990,6 +1008,7 @@ class LinkEntity {
990
1008
}
991
1009
992
1010
static LinkEntity forValueWitness (CanType concreteType, ValueWitness witness) {
1011
+ assert (!isEmbedded (concreteType));
993
1012
LinkEntity entity;
994
1013
entity.Pointer = concreteType.getPointer ();
995
1014
entity.Data = LINKENTITY_SET_FIELD (Kind, unsigned (Kind::ValueWitness))
@@ -998,6 +1017,7 @@ class LinkEntity {
998
1017
}
999
1018
1000
1019
static LinkEntity forValueWitnessTable (CanType type) {
1020
+ assert (!isEmbedded (type));
1001
1021
LinkEntity entity;
1002
1022
entity.setForType (Kind::ValueWitnessTable, type);
1003
1023
return entity;
@@ -1027,13 +1047,15 @@ class LinkEntity {
1027
1047
}
1028
1048
1029
1049
static LinkEntity forProtocolWitnessTable (const RootProtocolConformance *C) {
1050
+ assert (!isEmbedded (C));
1030
1051
LinkEntity entity;
1031
1052
entity.setForProtocolConformance (Kind::ProtocolWitnessTable, C);
1032
1053
return entity;
1033
1054
}
1034
1055
1035
1056
static LinkEntity
1036
1057
forProtocolWitnessTablePattern (const ProtocolConformance *C) {
1058
+ assert (!isEmbedded (C));
1037
1059
LinkEntity entity;
1038
1060
entity.setForProtocolConformance (Kind::ProtocolWitnessTablePattern, C);
1039
1061
return entity;
0 commit comments