mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Previously, the importer queued up conformances to complete once it was done importing the current batch of declarations. However, if there was a serialized Swift module that extended an imported type to add a conformance in exactly the wrong way, the importer could end up asking for that conformance later---even before the reference to the imported type was resolved. This led to a crash in the deserializer "while reading conformance for type X". Instead of this "pending actions" queue, we can just use the mechanisms already in place for lazily loading conformances. That way they'll get filled out on demand, which is better all around anyway. This does mean putting the requirement signature into the "lazy" part of the conformance, though. This does as a side effect mean that /all/ of the witnesses for the imported conformance may be opaque---that is, they will never be devirtualized to a particular implementation. However, they previously would have referred to methods implemented in Objective-C anyway, which are always dispatched with objc_msgSend. So this should have no practical effect. rdar://problem/32346184
21 lines
477 B
Objective-C
21 lines
477 B
Objective-C
@protocol FooProto
|
|
@property int bar;
|
|
@end
|
|
|
|
@protocol AnotherProto
|
|
@end
|
|
|
|
Class <FooProto> _Nonnull processFooType(Class <FooProto> _Nonnull);
|
|
Class <FooProto, AnotherProto> _Nonnull processComboType(Class <FooProto, AnotherProto> _Nonnull);
|
|
Class <AnotherProto, FooProto> _Nonnull processComboType2(Class <AnotherProto, FooProto> _Nonnull);
|
|
|
|
|
|
@protocol SubProto <FooProto>
|
|
@end
|
|
|
|
@interface ProtocolTestingBase
|
|
@end
|
|
|
|
@interface SubProtoImpl: ProtocolTestingBase <SubProto>
|
|
@end
|