Skip to content

Commit e806b62

Browse files
committed
SIL: Remove dynamic_method instruction
1 parent aceb620 commit e806b62

26 files changed

+29
-186
lines changed

docs/SIL.rst

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,8 +1034,7 @@ VTables
10341034
sil-vtable-entry ::= sil-decl-ref ':' sil-linkage? sil-function-name
10351035

10361036
SIL represents dynamic dispatch for class methods using the `class_method`_,
1037-
`super_method`_, `objc_method`_, `objc_super_method`_ and `dynamic_method`_
1038-
instructions.
1037+
`super_method`_, `objc_method`_, and `objc_super_method`_ instructions.
10391038

10401039
The potential destinations for `class_method`_ and `super_method`_ are
10411040
tracked in ``sil_vtable`` declarations for every class type. The declaration
@@ -2945,10 +2944,9 @@ These instructions perform dynamic lookup of class and generic methods.
29452944
The ``class_method`` and ``super_method`` instructions must reference
29462945
Swift native methods and always use vtable dispatch.
29472946

2948-
The ``objc_method``, ``objc_super_method`` and ``dynamic_method``
2949-
instructions must reference Objective-C methods (indicated by the
2950-
``foreign`` marker on a method reference, as in
2951-
``#NSObject.description!1.foreign``).
2947+
The ``objc_method`` and ``objc_super_method`` instructions must reference
2948+
Objective-C methods (indicated by the ``foreign`` marker on a method
2949+
reference, as in ``#NSObject.description!1.foreign``).
29522950

29532951
Note that ``objc_msgSend`` invocations can only be used as the callee
29542952
of an ``apply`` instruction or ``partial_apply`` instruction. They cannot
@@ -3046,40 +3044,6 @@ archetype of the original protocol and have the ``witness_method`` calling
30463044
convention. If the referenced protocol is an ``@objc`` protocol, the
30473045
resulting type has the ``objc`` calling convention.
30483046

3049-
dynamic_method
3050-
``````````````
3051-
::
3052-
3053-
sil-instruction ::= 'dynamic_method' sil-method-attributes?
3054-
sil-operand ',' sil-decl-ref ':' sil-type
3055-
3056-
%1 = dynamic_method %0 : $P, #X.method!1 : $@convention(thin) U -> V
3057-
// %0 must be of a protocol or protocol composition type $P,
3058-
// where $P contains the Swift.DynamicLookup protocol
3059-
// #X.method!1 must be a reference to an @objc method of any class
3060-
// or protocol type
3061-
//
3062-
// The "self" argument of the method type $@convention(thin) U -> V must be
3063-
// AnyObject
3064-
3065-
Looks up the implementation of an Objective-C method with the same
3066-
selector as the named method for the dynamic type of the
3067-
value inside an existential container. The "self" operand of the result
3068-
function value is represented using an opaque type, the value for which must
3069-
be projected out as a value of type ``AnyObject``.
3070-
3071-
It is undefined behavior if the dynamic type of the operand does not
3072-
have an implementation for the Objective-C method with the selector to
3073-
which the ``dynamic_method`` instruction refers, or if that
3074-
implementation has parameter or result types that are incompatible
3075-
with the method referenced by ``dynamic_method``.
3076-
This instruction should only be used in cases where its result will be
3077-
immediately consumed by an operation that performs the selector check
3078-
itself (e.g., an ``apply`` that lowers to ``objc_msgSend``).
3079-
To query whether the operand has an implementation for the given
3080-
method and safely handle the case where it does not, use
3081-
`dynamic_method_br`_.
3082-
30833047
Function Application
30843048
~~~~~~~~~~~~~~~~~~~~
30853049

include/swift/SIL/PatternMatch.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ UNARY_OP_MATCH_WITH_ARG_MATCHER(ClassMethodInst)
370370
UNARY_OP_MATCH_WITH_ARG_MATCHER(ObjCMethodInst)
371371
UNARY_OP_MATCH_WITH_ARG_MATCHER(SuperMethodInst)
372372
UNARY_OP_MATCH_WITH_ARG_MATCHER(ObjCSuperMethodInst)
373-
UNARY_OP_MATCH_WITH_ARG_MATCHER(DynamicMethodInst)
374373
UNARY_OP_MATCH_WITH_ARG_MATCHER(OpenExistentialAddrInst)
375374
UNARY_OP_MATCH_WITH_ARG_MATCHER(OpenExistentialRefInst)
376375
UNARY_OP_MATCH_WITH_ARG_MATCHER(OpenExistentialValueInst)

include/swift/SIL/SILBuilder.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,13 +1218,6 @@ class SILBuilder {
12181218
&getFunction(), OpenedArchetypes, Volatile));
12191219
}
12201220

1221-
DynamicMethodInst *createDynamicMethod(SILLocation Loc, SILValue Operand,
1222-
SILDeclRef Member, SILType MethodTy) {
1223-
return insert(DynamicMethodInst::create(
1224-
getSILDebugLocation(Loc), Operand, Member, MethodTy,
1225-
&getFunction(), OpenedArchetypes));
1226-
}
1227-
12281221
OpenExistentialAddrInst *
12291222
createOpenExistentialAddr(SILLocation Loc, SILValue Operand, SILType SelfTy,
12301223
OpenedExistentialAccess ForAccess) {

include/swift/SIL/SILCloner.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,17 +1601,6 @@ SILCloner<ImplClass>::visitWitnessMethodInst(WitnessMethodInst *Inst) {
16011601
Inst->isVolatile()));
16021602
}
16031603

1604-
template<typename ImplClass>
1605-
void
1606-
SILCloner<ImplClass>::visitDynamicMethodInst(DynamicMethodInst *Inst) {
1607-
getBuilder().setCurrentDebugScope(getOpScope(Inst->getDebugScope()));
1608-
doPostProcess(Inst,
1609-
getBuilder().createDynamicMethod(getOpLocation(Inst->getLoc()),
1610-
getOpValue(Inst->getOperand()),
1611-
Inst->getMember(),
1612-
getOpType(Inst->getType())));
1613-
}
1614-
16151604
template<typename ImplClass>
16161605
void
16171606
SILCloner<ImplClass>::visitOpenExistentialAddrInst(OpenExistentialAddrInst *Inst) {

include/swift/SIL/SILInstruction.h

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4983,30 +4983,6 @@ class WitnessMethodInst final
49834983
}
49844984
};
49854985

4986-
/// Given the address of a value of AnyObject protocol type and a method
4987-
/// constant referring to some Objective-C method, performs dynamic method
4988-
/// lookup to extract the implementation of that method. This method lookup
4989-
/// can fail at run-time
4990-
class DynamicMethodInst final
4991-
: public UnaryInstructionWithTypeDependentOperandsBase<
4992-
SILInstructionKind::DynamicMethodInst,
4993-
DynamicMethodInst,
4994-
MethodInst>
4995-
{
4996-
friend SILBuilder;
4997-
4998-
DynamicMethodInst(SILDebugLocation DebugLoc, SILValue Operand,
4999-
ArrayRef<SILValue> TypeDependentOperands,
5000-
SILDeclRef Member, SILType Ty)
5001-
: UnaryInstructionWithTypeDependentOperandsBase(DebugLoc, Operand,
5002-
TypeDependentOperands, Ty, Member) {}
5003-
5004-
static DynamicMethodInst *
5005-
create(SILDebugLocation DebugLoc, SILValue Operand,
5006-
SILDeclRef Member, SILType Ty, SILFunction *F,
5007-
SILOpenedArchetypesState &OpenedArchetypes);
5008-
};
5009-
50104986
/// Access allowed to the opened value by the open_existential_addr instruction.
50114987
/// Allowing mutable access to the opened existential requires a boxed
50124988
/// existential value's box to be unique.

include/swift/SIL/SILNodes.def

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,7 @@ ABSTRACT_VALUE_AND_INST(SingleValueInstruction, ValueBase, SILInstruction)
255255
MethodInst, None, DoesNotRelease)
256256
SINGLE_VALUE_INST(WitnessMethodInst, witness_method,
257257
MethodInst, None, DoesNotRelease)
258-
SINGLE_VALUE_INST(DynamicMethodInst, dynamic_method,
259-
MethodInst, None, DoesNotRelease)
260-
SINGLE_VALUE_INST_RANGE(MethodInst, ClassMethodInst, DynamicMethodInst)
258+
SINGLE_VALUE_INST_RANGE(MethodInst, ClassMethodInst, WitnessMethodInst)
261259

262260
// Conversions
263261
ABSTRACT_SINGLE_VALUE_INST(ConversionInst, SingleValueInstruction)

lib/IRGen/IRGenSIL.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,6 @@ class IRGenSILFunction :
895895
void visitObjCMethodInst(ObjCMethodInst *i);
896896
void visitObjCSuperMethodInst(ObjCSuperMethodInst *i);
897897
void visitWitnessMethodInst(WitnessMethodInst *i);
898-
void visitDynamicMethodInst(DynamicMethodInst *i);
899898

900899
void visitAllocValueBufferInst(AllocValueBufferInst *i);
901900
void visitProjectValueBufferInst(ProjectValueBufferInst *i);
@@ -5001,12 +5000,6 @@ IRGenSILFunction::visitProjectExistentialBoxInst(ProjectExistentialBoxInst *i) {
50015000
}
50025001
}
50035002

5004-
void IRGenSILFunction::visitDynamicMethodInst(DynamicMethodInst *i) {
5005-
assert(i->getMember().isForeign && "dynamic_method requires [objc] method");
5006-
setLoweredObjCMethod(i, i->getMember());
5007-
return;
5008-
}
5009-
50105003
void IRGenSILFunction::visitWitnessMethodInst(swift::WitnessMethodInst *i) {
50115004
// For Objective-C classes we need to arrange for a msgSend
50125005
// to happen when the method is called.

lib/IRGen/LoadableByAddress.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,6 @@ void LargeValueVisitor::mapValueStorage() {
478478
case SILInstructionKind::SuperMethodInst:
479479
case SILInstructionKind::ObjCMethodInst:
480480
case SILInstructionKind::ObjCSuperMethodInst:
481-
case SILInstructionKind::DynamicMethodInst:
482481
case SILInstructionKind::WitnessMethodInst: {
483482
// TODO Any more instructions to add here?
484483
auto *MI = dyn_cast<MethodInst>(currIns);
@@ -2037,14 +2036,6 @@ static void rewriteFunction(StructLoweringState &pass,
20372036
newSILType);
20382037
break;
20392038
}
2040-
case SILInstructionKind::DynamicMethodInst: {
2041-
auto *DMI = dyn_cast<DynamicMethodInst>(instr);
2042-
assert(DMI && "ValueKind is Witness Method but dyn_cast failed");
2043-
SILValue selfValue = instr->getOperand(0);
2044-
newInstr = methodBuilder.createDynamicMethod(loc, selfValue, member,
2045-
newSILType);
2046-
break;
2047-
}
20482039
case SILInstructionKind::WitnessMethodInst: {
20492040
auto *WMI = dyn_cast<WitnessMethodInst>(instr);
20502041
assert(!WMI->isVolatile());

lib/ParseSIL/ParseSIL.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3784,8 +3784,7 @@ bool SILParser::parseSILInstruction(SILBuilder &B) {
37843784
case SILInstructionKind::ClassMethodInst:
37853785
case SILInstructionKind::SuperMethodInst:
37863786
case SILInstructionKind::ObjCMethodInst:
3787-
case SILInstructionKind::ObjCSuperMethodInst:
3788-
case SILInstructionKind::DynamicMethodInst: {
3787+
case SILInstructionKind::ObjCSuperMethodInst: {
37893788
SILDeclRef Member;
37903789
SILType MethodTy;
37913790
SourceLoc TyLoc;
@@ -3816,9 +3815,6 @@ bool SILParser::parseSILInstruction(SILBuilder &B) {
38163815
case SILInstructionKind::ObjCSuperMethodInst:
38173816
ResultVal = B.createObjCSuperMethod(InstLoc, Val, Member, MethodTy);
38183817
break;
3819-
case SILInstructionKind::DynamicMethodInst:
3820-
ResultVal = B.createDynamicMethod(InstLoc, Val, Member, MethodTy);
3821-
break;
38223818
}
38233819
break;
38243820
}

lib/SIL/SILInstructions.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,23 +1615,6 @@ WitnessMethodInst::create(SILDebugLocation Loc, CanType LookupType,
16151615
Ty, TypeDependentOperands, Volatile);
16161616
}
16171617

1618-
DynamicMethodInst *
1619-
DynamicMethodInst::create(SILDebugLocation DebugLoc, SILValue Operand,
1620-
SILDeclRef Member, SILType Ty, SILFunction *F,
1621-
SILOpenedArchetypesState &OpenedArchetypes) {
1622-
SILModule &Mod = F->getModule();
1623-
SmallVector<SILValue, 8> TypeDependentOperands;
1624-
collectTypeDependentOperands(TypeDependentOperands, OpenedArchetypes, *F,
1625-
Ty.getSwiftRValueType());
1626-
1627-
unsigned size =
1628-
totalSizeToAlloc<swift::Operand>(1 + TypeDependentOperands.size());
1629-
void *Buffer = Mod.allocateInst(size, alignof(DynamicMethodInst));
1630-
return ::new (Buffer) DynamicMethodInst(DebugLoc, Operand,
1631-
TypeDependentOperands,
1632-
Member, Ty);
1633-
}
1634-
16351618
ObjCMethodInst *
16361619
ObjCMethodInst::create(SILDebugLocation DebugLoc, SILValue Operand,
16371620
SILDeclRef Member, SILType Ty, SILFunction *F,

lib/SIL/SILOwnershipVerifier.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,6 @@ ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, SuperMethod)
609609
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, ObjCSuperMethod)
610610
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, BridgeObjectToWord)
611611
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, CopyBlock)
612-
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, DynamicMethod)
613612
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, OpenExistentialBox)
614613
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, RefTailAddr)
615614
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, RefToRawPointer)

lib/SIL/SILPrinter.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,12 +1631,6 @@ class SILPrinter : public SILInstructionVisitor<SILPrinter> {
16311631
}
16321632
*this << " : " << WMI->getType();
16331633
}
1634-
void visitDynamicMethodInst(DynamicMethodInst *DMI) {
1635-
printMethodInst(DMI, DMI->getOperand());
1636-
*this << " : " << DMI->getMember().getDecl()->getInterfaceType();
1637-
*this << ", ";
1638-
*this << DMI->getType();
1639-
}
16401634
void visitOpenExistentialAddrInst(OpenExistentialAddrInst *OI) {
16411635
if (OI->getAccessKind() == OpenedExistentialAccess::Immutable)
16421636
*this << "immutable_access ";

lib/SIL/SILVerifier.cpp

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2194,26 +2194,6 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
21942194
return SILType::getPrimitiveObjectType(fnTy);
21952195
}
21962196

2197-
void checkDynamicMethodInst(DynamicMethodInst *EMI) {
2198-
requireObjectType(SILFunctionType, EMI, "result of dynamic_method");
2199-
SILType operandType = EMI->getOperand()->getType();
2200-
2201-
require(EMI->getMember().getDecl()->isObjC(), "method must be @objc");
2202-
if (!EMI->getMember().getDecl()->isInstanceMember()) {
2203-
require(operandType.is<MetatypeType>(),
2204-
"operand must have metatype type");
2205-
require(operandType.castTo<MetatypeType>()
2206-
->getInstanceType()->mayHaveSuperclass(),
2207-
"operand must have metatype of class or class-bounded type");
2208-
}
2209-
2210-
require(getDynamicMethodType(operandType, EMI->getMember())
2211-
.getSwiftRValueType()
2212-
->isBindableTo(EMI->getType().getSwiftRValueType()),
2213-
"result must be of the method's type");
2214-
verifyOpenedArchetype(EMI, EMI->getType().getSwiftRValueType());
2215-
}
2216-
22172197
void checkClassMethodInst(ClassMethodInst *CMI) {
22182198
auto member = CMI->getMember();
22192199
auto overrideTy = TC.getConstantOverrideType(member);

lib/SIL/ValueOwnershipKindClassifier.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ CONSTANT_OWNERSHIP_INST(Trivial, BeginAccess)
6363
CONSTANT_OWNERSHIP_INST(Trivial, BridgeObjectToWord)
6464
CONSTANT_OWNERSHIP_INST(Trivial, ClassMethod)
6565
CONSTANT_OWNERSHIP_INST(Trivial, ObjCMethod)
66-
CONSTANT_OWNERSHIP_INST(Trivial, DynamicMethod)
6766
CONSTANT_OWNERSHIP_INST(Trivial, ExistentialMetatype)
6867
CONSTANT_OWNERSHIP_INST(Trivial, FloatLiteral)
6968
CONSTANT_OWNERSHIP_INST(Trivial, FunctionRef)

lib/SILGen/SILGenApply.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ class Callee {
642642
Scope S(SGF, Loc);
643643
ManagedValue self =
644644
SelfValue.getValue().borrow(SGF).getAsSingleValue(SGF);
645-
SILValue fn = SGF.B.createDynamicMethod(
645+
SILValue fn = SGF.B.createObjCMethod(
646646
Loc, self.getValue(), *constant,
647647
SILType::getPrimitiveObjectType(closureType));
648648
return ManagedValue::forUnmanaged(fn);

lib/SILOptimizer/Analysis/BasicCalleeAnalysis.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,6 @@ CalleeList CalleeCache::getCalleeListForCalleeKind(SILValue Callee) const {
221221
return getCalleeList(cast<ClassMethodInst>(Callee));
222222

223223
case ValueKind::SuperMethodInst:
224-
case ValueKind::DynamicMethodInst:
225224
case ValueKind::ObjCMethodInst:
226225
case ValueKind::ObjCSuperMethodInst:
227226
return CalleeList();

lib/SILOptimizer/Analysis/EscapeAnalysis.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ static bool isNonWritableMemoryAddress(SILNode *V) {
7070
case SILNodeKind::SuperMethodInst:
7171
case SILNodeKind::ObjCMethodInst:
7272
case SILNodeKind::ObjCSuperMethodInst:
73-
case SILNodeKind::DynamicMethodInst:
7473
case SILNodeKind::StringLiteralInst:
7574
case SILNodeKind::ThinToThickFunctionInst:
7675
case SILNodeKind::ThinFunctionToPointerInst:

lib/SILOptimizer/Utils/SILInliner.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,6 @@ InlineCost swift::instructionInlineCost(SILInstruction &I) {
384384
case SILInstructionKind::AutoreleaseValueInst:
385385
case SILInstructionKind::UnmanagedAutoreleaseValueInst:
386386
case SILInstructionKind::DynamicMethodBranchInst:
387-
case SILInstructionKind::DynamicMethodInst:
388387
case SILInstructionKind::EnumInst:
389388
case SILInstructionKind::IndexAddrInst:
390389
case SILInstructionKind::TailAddrInst:

lib/Serialization/DeserializeSIL.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,8 +1897,7 @@ bool SILDeserializer::readSILInstruction(SILFunction *Fn, SILBasicBlock *BB,
18971897
case SILInstructionKind::ClassMethodInst:
18981898
case SILInstructionKind::SuperMethodInst:
18991899
case SILInstructionKind::ObjCMethodInst:
1900-
case SILInstructionKind::ObjCSuperMethodInst:
1901-
case SILInstructionKind::DynamicMethodInst: {
1900+
case SILInstructionKind::ObjCSuperMethodInst: {
19021901
// Format: a type, an operand and a SILDeclRef. Use SILOneTypeValuesLayout:
19031902
// type, Attr, SILDeclRef (DeclID, Kind, uncurryLevel), and an operand.
19041903
unsigned NextValueIndex = 0;
@@ -1932,11 +1931,6 @@ bool SILDeserializer::readSILInstruction(SILFunction *Fn, SILBasicBlock *BB,
19321931
getLocalValue(ListOfValues[NextValueIndex], operandTy),
19331932
DRef, Ty);
19341933
break;
1935-
case SILInstructionKind::DynamicMethodInst:
1936-
ResultVal = Builder.createDynamicMethod(Loc,
1937-
getLocalValue(ListOfValues[NextValueIndex], operandTy),
1938-
DRef, Ty);
1939-
break;
19401934
}
19411935
break;
19421936
}

lib/Serialization/SerializeSIL.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,21 +1755,6 @@ void SILSerializer::writeSILInstruction(const SILInstruction &SI) {
17551755
(unsigned)Ty.getCategory(), ListOfValues);
17561756
break;
17571757
}
1758-
case SILInstructionKind::DynamicMethodInst: {
1759-
// Format: a type, an operand and a SILDeclRef. Use SILOneTypeValuesLayout:
1760-
// type, Attr, SILDeclRef (DeclID, Kind, uncurryLevel),
1761-
// and an operand.
1762-
const DynamicMethodInst *DMI = cast<DynamicMethodInst>(&SI);
1763-
SILType Ty = DMI->getType();
1764-
SmallVector<ValueID, 9> ListOfValues;
1765-
handleMethodInst(DMI, DMI->getOperand(), ListOfValues);
1766-
1767-
SILOneTypeValuesLayout::emitRecord(Out, ScratchRecord,
1768-
SILAbbrCodes[SILOneTypeValuesLayout::Code], (unsigned)SI.getKind(),
1769-
S.addTypeRef(Ty.getSwiftRValueType()),
1770-
(unsigned)Ty.getCategory(), ListOfValues);
1771-
break;
1772-
}
17731758
case SILInstructionKind::DynamicMethodBranchInst: {
17741759
// Format: a typed value, a SILDeclRef, a BasicBlock ID for method,
17751760
// a BasicBlock ID for no method. Use SILOneTypeValuesLayout.

test/SIL/Parser/undef.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ bb0:
105105
class_method undef : $C, #C.fn!1 : (C) -> () -> (), $@convention(method) (@guaranteed C) -> ()
106106
// CHECK: super_method undef : $D, #C.fn!1 : (C) -> () -> (), $@convention(method) (@guaranteed C) -> ()
107107
super_method undef : $D, #C.fn!1 : (C) -> () -> (), $@convention(method) (@guaranteed C) -> ()
108-
// CHECK: dynamic_method undef : $C, #C.fn!1 : (C) -> () -> (), $@convention(method) (@guaranteed C) -> ()
109-
dynamic_method undef : $C, #C.fn!1 : (C) -> () -> (), $@convention(method) (@guaranteed C) -> ()
108+
// CHECK: objc_method undef : $C, #C.fn!1.foreign : (C) -> () -> (), $@convention(objc_method) (C) -> ()
109+
objc_method undef : $C, #C.fn!1.foreign : (C) -> () -> (), $@convention(objc_method) (C) -> ()
110110

111111
// Function Application
112112

0 commit comments

Comments
 (0)