@@ -457,7 +457,8 @@ namespace {
457457
458458 void addExtendedContext () {
459459 auto string = IGM.getTypeRef (
460- E->getSelfInterfaceType ()->getCanonicalType ());
460+ E->getSelfInterfaceType ()->getCanonicalType (),
461+ MangledTypeRefRole::Metadata);
461462 B.addRelativeAddress (string);
462463 }
463464
@@ -602,7 +603,6 @@ namespace {
602603 auto var = cast<llvm::GlobalVariable>(addr);
603604
604605 var->setConstant (true );
605- disableAddressSanitizer (IGM, var);
606606 IGM.setTrueConstGlobal (var);
607607 }
608608
@@ -765,51 +765,16 @@ namespace {
765765 entry.getAssociatedTypeWitness ().Requirement != assocType)
766766 continue ;
767767
768- auto witness = entry.getAssociatedTypeWitness ().Witness ;
769- return getDefaultAssociatedTypeMetadataAccessFunction (
770- AssociatedType (assocType), witness);
768+ auto witness =
769+ entry.getAssociatedTypeWitness ().Witness ->mapTypeOutOfContext ()
770+ ->getCanonicalType ();
771+ return IGM.getAssociatedTypeWitness (witness,
772+ /* inProtocolContext=*/ true );
771773 }
772774
773775 return nullptr ;
774776 }
775777
776- // / Create an associated type metadata access function for the default
777- // / associated type witness.
778- llvm::Constant *getDefaultAssociatedTypeMetadataAccessFunction (
779- AssociatedType requirement, CanType witness) {
780- auto accessor =
781- IGM.getAddrOfDefaultAssociatedTypeMetadataAccessFunction (requirement);
782-
783- IRGenFunction IGF (IGM, accessor);
784- if (IGM.DebugInfo )
785- IGM.DebugInfo ->emitArtificialFunction (IGF, accessor);
786-
787- Explosion parameters = IGF.collectParameters ();
788- auto request = DynamicMetadataRequest (parameters.claimNext ());
789-
790- llvm::Value *self = parameters.claimNext ();
791- llvm::Value *wtable = parameters.claimNext ();
792-
793- CanType selfInContext =
794- Proto->mapTypeIntoContext (Proto->getProtocolSelfType ())
795- ->getCanonicalType ();
796-
797- // Bind local Self type data from the metadata argument.
798- IGF.bindLocalTypeDataFromTypeMetadata (selfInContext, IsExact, self,
799- MetadataState::Abstract);
800- IGF.setUnscopedLocalTypeData (
801- selfInContext,
802- LocalTypeDataKind::forAbstractProtocolWitnessTable (Proto),
803- wtable);
804-
805- // Emit a reference to the type metadata.
806- auto response = IGF.emitTypeMetadataRef (witness, request);
807- response.ensureDynamicState (IGF);
808- auto returnValue = response.combine (IGF);
809- IGF.Builder .CreateRet (returnValue);
810- return accessor;
811- }
812-
813778 llvm::Constant *findDefaultAssociatedConformanceWitness (
814779 CanType association,
815780 ProtocolDecl *requirement) {
@@ -4237,7 +4202,8 @@ GenericRequirementsMetadata irgen::addGenericRequirements(
42374202
42384203 auto flags = GenericRequirementFlags (abiKind, false , false );
42394204 auto typeName =
4240- IGM.getTypeRef (requirement.getSecondType ()->getCanonicalType ());
4205+ IGM.getTypeRef (requirement.getSecondType ()->getCanonicalType (),
4206+ MangledTypeRefRole::Metadata);
42414207
42424208 addGenericRequirement (IGM, B, metadata, sig, flags,
42434209 requirement.getFirstType (),
0 commit comments