@@ -85,6 +85,18 @@ enum class TypeMetadataAddress {
8585 FullMetadata,
8686};
8787
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+
88100// / A link entity is some sort of named declaration, combined with all
89101// / the information necessary to distinguish specific implementations
90102// / of the declaration from each other.
@@ -828,13 +840,15 @@ class LinkEntity {
828840 static LinkEntity forTypeMetadata (CanType concreteType,
829841 TypeMetadataAddress addr) {
830842 assert (!isObjCImplementation (concreteType));
843+ assert (!isEmbedded (concreteType));
831844 LinkEntity entity;
832845 entity.setForType (Kind::TypeMetadata, concreteType);
833846 entity.Data |= LINKENTITY_SET_FIELD (MetadataAddress, unsigned (addr));
834847 return entity;
835848 }
836849
837850 static LinkEntity forTypeMetadataPattern (NominalTypeDecl *decl) {
851+ assert (!isEmbedded (decl));
838852 LinkEntity entity;
839853 entity.setForDecl (Kind::TypeMetadataPattern, decl);
840854 return entity;
@@ -891,25 +905,29 @@ class LinkEntity {
891905
892906 static LinkEntity forNominalTypeDescriptor (NominalTypeDecl *decl) {
893907 assert (!isObjCImplementation (decl));
908+ assert (!isEmbedded (decl));
894909 LinkEntity entity;
895910 entity.setForDecl (Kind::NominalTypeDescriptor, decl);
896911 return entity;
897912 }
898913
899914 static LinkEntity forNominalTypeDescriptorRecord (NominalTypeDecl *decl) {
900915 assert (!isObjCImplementation (decl));
916+ assert (!isEmbedded (decl));
901917 LinkEntity entity;
902918 entity.setForDecl (Kind::NominalTypeDescriptorRecord, decl);
903919 return entity;
904920 }
905921
906922 static LinkEntity forOpaqueTypeDescriptor (OpaqueTypeDecl *decl) {
923+ assert (!isEmbedded (decl));
907924 LinkEntity entity;
908925 entity.setForDecl (Kind::OpaqueTypeDescriptor, decl);
909926 return entity;
910927 }
911928
912929 static LinkEntity forOpaqueTypeDescriptorRecord (OpaqueTypeDecl *decl) {
930+ assert (!isEmbedded (decl));
913931 LinkEntity entity;
914932 entity.setForDecl (Kind::OpaqueTypeDescriptorRecord, decl);
915933 return entity;
@@ -990,6 +1008,7 @@ class LinkEntity {
9901008 }
9911009
9921010 static LinkEntity forValueWitness (CanType concreteType, ValueWitness witness) {
1011+ assert (!isEmbedded (concreteType));
9931012 LinkEntity entity;
9941013 entity.Pointer = concreteType.getPointer ();
9951014 entity.Data = LINKENTITY_SET_FIELD (Kind, unsigned (Kind::ValueWitness))
@@ -998,6 +1017,7 @@ class LinkEntity {
9981017 }
9991018
10001019 static LinkEntity forValueWitnessTable (CanType type) {
1020+ assert (!isEmbedded (type));
10011021 LinkEntity entity;
10021022 entity.setForType (Kind::ValueWitnessTable, type);
10031023 return entity;
@@ -1027,13 +1047,15 @@ class LinkEntity {
10271047 }
10281048
10291049 static LinkEntity forProtocolWitnessTable (const RootProtocolConformance *C) {
1050+ assert (!isEmbedded (C));
10301051 LinkEntity entity;
10311052 entity.setForProtocolConformance (Kind::ProtocolWitnessTable, C);
10321053 return entity;
10331054 }
10341055
10351056 static LinkEntity
10361057 forProtocolWitnessTablePattern (const ProtocolConformance *C) {
1058+ assert (!isEmbedded (C));
10371059 LinkEntity entity;
10381060 entity.setForProtocolConformance (Kind::ProtocolWitnessTablePattern, C);
10391061 return entity;
0 commit comments