@@ -125,6 +125,11 @@ bool checkResilience(DeclType *D, ModuleDecl *M,
125125 D->isResilient (M, expansion);
126126}
127127
128+ bool checkTypeABIAccessible (SILFunction const &F, SILType ty) {
129+ return F.getASTContext ().LangOpts .BypassResilienceChecks ||
130+ F.isTypeABIAccessible (ty);
131+ }
132+
128133// / Metaprogramming-friendly base class.
129134template <class Impl >
130135class SILVerifierBase : public SILInstructionVisitor <Impl> {
@@ -2907,7 +2912,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
29072912 " Dest address should be lvalue" );
29082913 requireSameType (cai->getDest ()->getType (), cai->getSrc ()->getType (),
29092914 " Store operand type and dest type mismatch" );
2910- require (F. isTypeABIAccessible ( cai->getDest ()->getType ()),
2915+ require (checkTypeABIAccessible (F, cai->getDest ()->getType ()),
29112916 " cannot directly copy type with inaccessible ABI" );
29122917 require (cai->getModule ().getStage () == SILStage::Raw ||
29132918 (cai->isTakeOfSrc () || !cai->getSrc ()->getType ().isMoveOnly ()),
@@ -2922,7 +2927,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
29222927 " Dest address should be lvalue" );
29232928 requireSameType (ecai->getDest ()->getType (), ecai->getSrc ()->getType (),
29242929 " Store operand type and dest type mismatch" );
2925- require (F. isTypeABIAccessible ( ecai->getDest ()->getType ()),
2930+ require (checkTypeABIAccessible (F, ecai->getDest ()->getType ()),
29262931 " cannot directly copy type with inaccessible ABI" );
29272932 }
29282933
@@ -2934,7 +2939,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
29342939 " Dest address should be lvalue" );
29352940 requireSameType (SI->getDest ()->getType (), SI->getSrc ()->getType (),
29362941 " Store operand type and dest type mismatch" );
2937- require (F. isTypeABIAccessible ( SI->getDest ()->getType ()),
2942+ require (checkTypeABIAccessible (F, SI->getDest ()->getType ()),
29382943 " cannot directly copy type with inaccessible ABI" );
29392944 }
29402945
@@ -3356,7 +3361,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
33563361 void checkDestroyAddrInst (DestroyAddrInst *DI) {
33573362 require (DI->getOperand ()->getType ().isAddress (),
33583363 " Operand of destroy_addr must be address" );
3359- require (F. isTypeABIAccessible ( DI->getOperand ()->getType ()),
3364+ require (checkTypeABIAccessible (F, DI->getOperand ()->getType ()),
33603365 " cannot directly destroy type with inaccessible ABI" );
33613366 }
33623367
0 commit comments