Skip to content

Commit 0738780

Browse files
committed
[CSSimplify] Introduce containsPackExpansionType that handles pack expansion variables
`TypeBase::constainsPackExpansionType` cannot handle this because it leaves in AST.
1 parent b0abb7f commit 0738780

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

lib/Sema/CSSimplify.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ static bool isPackExpansionType(Type type) {
127127
return false;
128128
}
129129

130+
static bool containsPackExpansionType(ArrayRef<AnyFunctionType::Param> params) {
131+
return llvm::any_of(params, [&](const auto &param) {
132+
return isPackExpansionType(param.getPlainType());
133+
});
134+
}
135+
136+
static bool containsPackExpansionType(TupleType *tuple) {
137+
return llvm::any_of(tuple->getElements(), [&](const auto &elt) {
138+
return isPackExpansionType(elt.getType());
139+
});
140+
}
141+
130142
bool constraints::doesMemberRefApplyCurriedSelf(Type baseTy,
131143
const ValueDecl *decl) {
132144
assert(decl->getDeclContext()->isTypeContext() &&
@@ -2107,8 +2119,8 @@ class TupleMatcher {
21072119
bool match(MatchKind kind, ConstraintLocatorBuilder locator) {
21082120
// FIXME: TuplePackMatcher should completely replace the non-variadic
21092121
// case too eventually.
2110-
if (tuple1->containsPackExpansionType() ||
2111-
tuple2->containsPackExpansionType()) {
2122+
if (containsPackExpansionType(tuple1) ||
2123+
containsPackExpansionType(tuple2)) {
21122124
TuplePackMatcher matcher(tuple1, tuple2, isPackExpansionType);
21132125
if (matcher.match())
21142126
return true;
@@ -3352,8 +3364,8 @@ ConstraintSystem::matchFunctionTypes(FunctionType *func1, FunctionType *func2,
33523364

33533365
// FIXME: ParamPackMatcher should completely replace the non-variadic
33543366
// case too eventually.
3355-
if (AnyFunctionType::containsPackExpansionType(func1Params) ||
3356-
AnyFunctionType::containsPackExpansionType(func2Params)) {
3367+
if (containsPackExpansionType(func1Params) ||
3368+
containsPackExpansionType(func2Params)) {
33573369
ParamPackMatcher matcher(func1Params, func2Params, getASTContext(),
33583370
isPackExpansionType);
33593371
if (matcher.match())
@@ -14184,8 +14196,8 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyFixConstraint(
1418414196
// the fix constraint solved without trying to figure out which tuple
1418514197
// elements were part of the pack.
1418614198
{
14187-
if (lhs->containsPackExpansionType() ||
14188-
rhs->containsPackExpansionType()) {
14199+
if (containsPackExpansionType(lhs) ||
14200+
containsPackExpansionType(rhs)) {
1418914201
if (recordFix(fix))
1419014202
return SolutionKind::Error;
1419114203
return SolutionKind::Solved;

0 commit comments

Comments
 (0)