Skip to content

Commit a65812c

Browse files
committed
[Constraint solver] Add ConstraintKind::BindToPointerType.
This matches up with TypeMatchKind::BindToPointerType.
1 parent edfc64d commit a65812c

File tree

5 files changed

+32
-16
lines changed

5 files changed

+32
-16
lines changed

lib/Sema/CSSimplify.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1127,9 +1127,11 @@ ConstraintSystem::matchExistentialTypes(Type type1, Type type2,
11271127
static ConstraintKind getConstraintKind(TypeMatchKind kind) {
11281128
switch (kind) {
11291129
case TypeMatchKind::BindType:
1130-
case TypeMatchKind::BindToPointerType:
11311130
return ConstraintKind::Bind;
11321131

1132+
case TypeMatchKind::BindToPointerType:
1133+
return ConstraintKind::BindToPointerType;
1134+
11331135
case TypeMatchKind::BindParamType:
11341136
return ConstraintKind::BindParam;
11351137

@@ -3506,6 +3508,8 @@ static TypeMatchKind getTypeMatchKind(ConstraintKind kind) {
35063508
case ConstraintKind::Bind: return TypeMatchKind::BindType;
35073509
case ConstraintKind::Equal: return TypeMatchKind::SameType;
35083510
case ConstraintKind::BindParam: return TypeMatchKind::BindParamType;
3511+
case ConstraintKind::BindToPointerType:
3512+
return TypeMatchKind::BindToPointerType;
35093513
case ConstraintKind::Subtype: return TypeMatchKind::Subtype;
35103514
case ConstraintKind::Conversion: return TypeMatchKind::Conversion;
35113515
case ConstraintKind::ExplicitConversion:
@@ -4160,6 +4164,7 @@ ConstraintSystem::addConstraintImpl(ConstraintKind kind, Type first,
41604164
case ConstraintKind::Equal:
41614165
case ConstraintKind::Bind:
41624166
case ConstraintKind::BindParam:
4167+
case ConstraintKind::BindToPointerType:
41634168
case ConstraintKind::Subtype:
41644169
case ConstraintKind::Conversion:
41654170
case ConstraintKind::ExplicitConversion:
@@ -4230,6 +4235,7 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
42304235
case ConstraintKind::Bind:
42314236
case ConstraintKind::Equal:
42324237
case ConstraintKind::BindParam:
4238+
case ConstraintKind::BindToPointerType:
42334239
case ConstraintKind::Subtype:
42344240
case ConstraintKind::Conversion:
42354241
case ConstraintKind::ExplicitConversion:

lib/Sema/CSSolver.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ static bool shouldBindToValueType(Constraint *constraint)
676676
case ConstraintKind::Bind:
677677
case ConstraintKind::Equal:
678678
case ConstraintKind::BindParam:
679+
case ConstraintKind::BindToPointerType:
679680
case ConstraintKind::ConformsTo:
680681
case ConstraintKind::LiteralConformsTo:
681682
case ConstraintKind::CheckedCast:
@@ -757,6 +758,7 @@ static PotentialBindings getPotentialBindings(ConstraintSystem &cs,
757758
case ConstraintKind::Bind:
758759
case ConstraintKind::Equal:
759760
case ConstraintKind::BindParam:
761+
case ConstraintKind::BindToPointerType:
760762
case ConstraintKind::Subtype:
761763
case ConstraintKind::Conversion:
762764
case ConstraintKind::ExplicitConversion:

lib/Sema/Constraint.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Constraint::Constraint(ConstraintKind Kind, Type First, Type Second,
5353
case ConstraintKind::Bind:
5454
case ConstraintKind::Equal:
5555
case ConstraintKind::BindParam:
56+
case ConstraintKind::BindToPointerType:
5657
case ConstraintKind::Subtype:
5758
case ConstraintKind::Conversion:
5859
case ConstraintKind::ExplicitConversion:
@@ -150,6 +151,7 @@ Constraint *Constraint::clone(ConstraintSystem &cs) const {
150151
case ConstraintKind::Bind:
151152
case ConstraintKind::Equal:
152153
case ConstraintKind::BindParam:
154+
case ConstraintKind::BindToPointerType:
153155
case ConstraintKind::Subtype:
154156
case ConstraintKind::Conversion:
155157
case ConstraintKind::ExplicitConversion:
@@ -219,6 +221,7 @@ void Constraint::print(llvm::raw_ostream &Out, SourceManager *sm) const {
219221
case ConstraintKind::Bind: Out << " bind "; break;
220222
case ConstraintKind::Equal: Out << " equal "; break;
221223
case ConstraintKind::BindParam: Out << " bind param "; break;
224+
case ConstraintKind::BindToPointerType: Out << " bind to pointer "; break;
222225
case ConstraintKind::Subtype: Out << " subtype "; break;
223226
case ConstraintKind::Conversion: Out << " conv "; break;
224227
case ConstraintKind::ExplicitConversion: Out << " expl conv "; break;
@@ -449,6 +452,7 @@ gatherReferencedTypeVars(Constraint *constraint,
449452
case ConstraintKind::ApplicableFunction:
450453
case ConstraintKind::Bind:
451454
case ConstraintKind::BindParam:
455+
case ConstraintKind::BindToPointerType:
452456
case ConstraintKind::ArgumentConversion:
453457
case ConstraintKind::Conversion:
454458
case ConstraintKind::ExplicitConversion:

lib/Sema/Constraint.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ enum class ConstraintKind : char {
5858
/// type is an lvalue type with the same object type. Otherwise, the two
5959
/// types must be the same type.
6060
BindParam,
61+
/// \brief Binds the first type to the element type of the second type.
62+
BindToPointerType,
6163
/// \brief The first type is a subtype of the second type, i.e., a value
6264
/// of the type of the first type can be used wherever a value of the
6365
/// second type is expected.
@@ -464,6 +466,7 @@ class Constraint final : public llvm::ilist_node<Constraint>,
464466
case ConstraintKind::Bind:
465467
case ConstraintKind::Equal:
466468
case ConstraintKind::BindParam:
469+
case ConstraintKind::BindToPointerType:
467470
case ConstraintKind::Subtype:
468471
case ConstraintKind::Conversion:
469472
case ConstraintKind::ExplicitConversion:

lib/Sema/ConstraintGraph.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -692,21 +692,22 @@ unsigned ConstraintGraph::computeConnectedComponents(
692692
/// edge in the graph.
693693
static bool shouldContractEdge(ConstraintKind kind) {
694694
switch (kind) {
695-
case ConstraintKind::Bind:
696-
case ConstraintKind::BindParam:
697-
case ConstraintKind::Equal:
698-
case ConstraintKind::BindOverload:
699-
700-
// We currently only allow subtype contractions for the purpose of
701-
// parameter binding constraints.
702-
// TODO: We do this because of how inout parameter bindings are handled
703-
// for implicit closure parameters. We should consider adjusting our
704-
// current approach to unlock more opportunities for subtype contractions.
705-
case ConstraintKind::Subtype:
706-
return true;
707-
708-
default:
709-
return false;
695+
case ConstraintKind::Bind:
696+
case ConstraintKind::BindParam:
697+
case ConstraintKind::BindToPointerType:
698+
case ConstraintKind::Equal:
699+
case ConstraintKind::BindOverload:
700+
701+
// We currently only allow subtype contractions for the purpose of
702+
// parameter binding constraints.
703+
// TODO: We do this because of how inout parameter bindings are handled
704+
// for implicit closure parameters. We should consider adjusting our
705+
// current approach to unlock more opportunities for subtype contractions.
706+
case ConstraintKind::Subtype:
707+
return true;
708+
709+
default:
710+
return false;
710711
}
711712
}
712713

0 commit comments

Comments
 (0)