diff --git a/include/swift/AST/TypeMatcher.h b/include/swift/AST/TypeMatcher.h index 8f3e7ca1c3ea4..076d445c8c477 100644 --- a/include/swift/AST/TypeMatcher.h +++ b/include/swift/AST/TypeMatcher.h @@ -438,10 +438,12 @@ class TypeMatcher { if (firstArgs.size() == secondArgs.size()) { for (unsigned i : indices(firstArgs)) { - return this->visit(CanType(firstArgs[i]), - secondArgs[i], - sugaredFirstType->castTo() - ->getArgs()[i]); + if (!this->visit(CanType(firstArgs[i]), + secondArgs[i], + sugaredFirstType->castTo() + ->getArgs()[i])) { + return false; + } } return true; diff --git a/test/Generics/issue-63410.swift b/test/Generics/issue-63410.swift new file mode 100644 index 0000000000000..81b2585d538ce --- /dev/null +++ b/test/Generics/issue-63410.swift @@ -0,0 +1,8 @@ +// RUN: %target-typecheck-verify-swift + +protocol Derived where C == any Derived { + associatedtype A + associatedtype B + + associatedtype C +}