@@ -125,6 +125,11 @@ bool checkResilience(DeclType *D, ModuleDecl *M,
125
125
D->isResilient (M, expansion);
126
126
}
127
127
128
+ bool checkTypeABIAccessible (SILFunction const &F, SILType ty) {
129
+ return F.getASTContext ().LangOpts .BypassResilienceChecks ||
130
+ F.isTypeABIAccessible (ty);
131
+ }
132
+
128
133
// / Metaprogramming-friendly base class.
129
134
template <class Impl >
130
135
class SILVerifierBase : public SILInstructionVisitor <Impl> {
@@ -2907,7 +2912,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
2907
2912
" Dest address should be lvalue" );
2908
2913
requireSameType (cai->getDest ()->getType (), cai->getSrc ()->getType (),
2909
2914
" Store operand type and dest type mismatch" );
2910
- require (F. isTypeABIAccessible ( cai->getDest ()->getType ()),
2915
+ require (checkTypeABIAccessible (F, cai->getDest ()->getType ()),
2911
2916
" cannot directly copy type with inaccessible ABI" );
2912
2917
require (cai->getModule ().getStage () == SILStage::Raw ||
2913
2918
(cai->isTakeOfSrc () || !cai->getSrc ()->getType ().isMoveOnly ()),
@@ -2922,7 +2927,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
2922
2927
" Dest address should be lvalue" );
2923
2928
requireSameType (ecai->getDest ()->getType (), ecai->getSrc ()->getType (),
2924
2929
" Store operand type and dest type mismatch" );
2925
- require (F. isTypeABIAccessible ( ecai->getDest ()->getType ()),
2930
+ require (checkTypeABIAccessible (F, ecai->getDest ()->getType ()),
2926
2931
" cannot directly copy type with inaccessible ABI" );
2927
2932
}
2928
2933
@@ -2934,7 +2939,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
2934
2939
" Dest address should be lvalue" );
2935
2940
requireSameType (SI->getDest ()->getType (), SI->getSrc ()->getType (),
2936
2941
" Store operand type and dest type mismatch" );
2937
- require (F. isTypeABIAccessible ( SI->getDest ()->getType ()),
2942
+ require (checkTypeABIAccessible (F, SI->getDest ()->getType ()),
2938
2943
" cannot directly copy type with inaccessible ABI" );
2939
2944
}
2940
2945
@@ -3356,7 +3361,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
3356
3361
void checkDestroyAddrInst (DestroyAddrInst *DI) {
3357
3362
require (DI->getOperand ()->getType ().isAddress (),
3358
3363
" Operand of destroy_addr must be address" );
3359
- require (F. isTypeABIAccessible ( DI->getOperand ()->getType ()),
3364
+ require (checkTypeABIAccessible (F, DI->getOperand ()->getType ()),
3360
3365
" cannot directly destroy type with inaccessible ABI" );
3361
3366
}
3362
3367
0 commit comments