@@ -1205,8 +1205,9 @@ class IRGenSILFunction :
1205
1205
// SIL instruction lowering
1206
1206
// ===--------------------------------------------------------------------===//
1207
1207
1208
- void visitSILBasicBlock (SILBasicBlock *BB );
1208
+ bool shouldUseDispatchThunk (SILDeclRef method );
1209
1209
1210
+ void visitSILBasicBlock (SILBasicBlock *BB);
1210
1211
void emitErrorResultVar (CanSILFunctionType FnTy,
1211
1212
SILResultInfo ErrorInfo,
1212
1213
DebugValueInst *DbgValue);
@@ -8414,17 +8415,7 @@ void IRGenSILFunction::visitObjCSuperMethodInst(swift::ObjCSuperMethodInst *i) {
8414
8415
/* startAtSuper=*/ true );
8415
8416
}
8416
8417
8417
- void IRGenSILFunction::visitClassMethodInst (swift::ClassMethodInst *i) {
8418
- assert (!i->getMember ().isForeign );
8419
-
8420
- Explosion base = getLoweredExplosion (i->getOperand ());
8421
- llvm::Value *baseValue = base.claimNext ();
8422
-
8423
- SILDeclRef method = i->getMember ().getOverriddenVTableEntry ();
8424
- PrettyStackTraceSILDeclRef entry (" lowering class method call to" , method);
8425
-
8426
- auto methodType = i->getType ().castTo <SILFunctionType>();
8427
-
8418
+ bool IRGenSILFunction::shouldUseDispatchThunk (SILDeclRef method) {
8428
8419
AccessLevel methodAccess = method.getDecl ()->getEffectiveAccess ();
8429
8420
auto *classDecl = cast<ClassDecl>(method.getDecl ()->getDeclContext ());
8430
8421
bool shouldUseDispatchThunk = false ;
@@ -8451,9 +8442,22 @@ void IRGenSILFunction::visitClassMethodInst(swift::ClassMethodInst *i) {
8451
8442
shouldUseDispatchThunk =
8452
8443
classDecl->getModuleContext () != IGM.getSwiftModule ();
8453
8444
}
8445
+ return shouldUseDispatchThunk;
8446
+ }
8454
8447
8455
- if (shouldUseDispatchThunk) {
8456
- llvm::Constant *fnPtr = IGM.getAddrOfDispatchThunk (method, NotForDefinition);
8448
+ void IRGenSILFunction::visitClassMethodInst (swift::ClassMethodInst *i) {
8449
+ assert (!i->getMember ().isForeign );
8450
+
8451
+ Explosion base = getLoweredExplosion (i->getOperand ());
8452
+ llvm::Value *baseValue = base.claimNext ();
8453
+
8454
+ SILDeclRef method = i->getMember ().getOverriddenVTableEntry ();
8455
+ PrettyStackTraceSILDeclRef entry (" lowering class method call to" , method);
8456
+
8457
+ auto methodType = i->getType ().castTo <SILFunctionType>();
8458
+ if (shouldUseDispatchThunk (method)) {
8459
+ llvm::Constant *fnPtr =
8460
+ IGM.getAddrOfDispatchThunk (method, NotForDefinition);
8457
8461
8458
8462
if (methodType->isAsync ()) {
8459
8463
auto *fnPtrType = fnPtr->getType ();
0 commit comments