File tree Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -841,6 +841,15 @@ bool swift::_checkGenericRequirements(
841
841
substGenericParam, substWitnessTable).getMetadata ();
842
842
if (!baseType) return true ;
843
843
844
+ // If the type which is constrained to a base class is an existential
845
+ // type, and if that existential type includes a superclass constraint,
846
+ // just require that the superclass by which the existential is
847
+ // constrained is a subclass of the base class.
848
+ if (auto *existential = dyn_cast<ExistentialTypeMetadata>(subjectType)) {
849
+ if (auto *superclassConstraint = existential->getSuperclassConstraint ())
850
+ subjectType = superclassConstraint;
851
+ }
852
+
844
853
if (!isSubclass (subjectType, baseType))
845
854
return true ;
846
855
Original file line number Diff line number Diff line change
1
+ // RUN: %target-run-simple-swift
2
+ // REQUIRES: objc_interop
3
+
4
+ import Foundation
5
+
6
+ final class Storage < T: NSObject > {
7
+ weak var object : T ?
8
+ init ( object: T ) {
9
+ self . object = object
10
+ }
11
+ }
12
+
13
+
14
+ @objc protocol MyProtocol { }
15
+ typealias MyStorage = Storage < NSObject & MyProtocol >
16
+
17
+ class Gadget : NSObject , MyProtocol {
18
+ func testit( ) {
19
+ _ = MyStorage ( object: self )
20
+ }
21
+ }
22
+
23
+ let gadget = Gadget ( )
24
+ gadget. testit ( )
You can’t perform that action at this time.
0 commit comments