File tree Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -3999,14 +3999,25 @@ CanType ProtocolCompositionType::getMinimalCanonicalType(
3999
3999
// represent the minimal composition.
4000
4000
auto sig = useDC->getGenericSignatureOfContext ();
4001
4001
const auto Sig = Ctx.getOpenedExistentialSignature (CanTy, sig);
4002
- const auto &Reqs = Sig.getRequirements ();
4002
+ SmallVector<Requirement, 2 > Reqs;
4003
+ SmallVector<InverseRequirement, 2 > Inverses;
4004
+ Sig->getRequirementsWithInverses (Reqs, Inverses);
4005
+
4003
4006
if (Reqs.size () == 1 ) {
4004
4007
return Reqs.front ().getSecondType ()->getCanonicalType ();
4005
4008
}
4006
4009
4007
4010
// The set of inverses is already minimal.
4008
4011
auto MinimalInverses = Composition->getInverses ();
4009
4012
4013
+ #ifndef NDEBUG
4014
+ // Check that the generic signature's inverses matches.
4015
+ InvertibleProtocolSet genSigInverses;
4016
+ for (InverseRequirement ireq : Inverses)
4017
+ genSigInverses.insert (ireq.getKind ());
4018
+ assert (genSigInverses == MinimalInverses);
4019
+ #endif
4020
+
4010
4021
llvm::SmallVector<Type, 2 > MinimalMembers;
4011
4022
bool MinimalHasExplicitAnyObject = false ;
4012
4023
auto ifaceTy = Sig.getGenericParams ().back ();
Original file line number Diff line number Diff line change @@ -100,4 +100,4 @@ typealias Z5 = (~Int) -> Void // expected-error {{type 'Int' is not invertible}}
100
100
typealias Z6 = ~ ( ) -> ( ) // expected-error {{single argument function types require parentheses}}
101
101
// expected-error@-1 {{type '()' is not invertible}}
102
102
typealias Z7 = ~ ( Copyable & Hashable ) // expected-error {{type 'Hashable' is not invertible}}
103
- typealias Z8 = ~ Copyable & Hashable
103
+ typealias Z8 = ~ Copyable & Hashable // expected-error {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
Original file line number Diff line number Diff line change 7
7
sil_stage canonical
8
8
9
9
import Builtin
10
+ import Swift
10
11
11
12
typealias AnyObject = Builtin.AnyObject
12
13
You can’t perform that action at this time.
0 commit comments