Skip to content

Commit 8362997

Browse files
authored
Merge pull request swiftlang#84207 from slavapestov/fix-issue-84051
SIL: Fix bug in AbstractionPattern::getFunctionThrownErrorType()
2 parents ae9bae7 + 375212d commit 8362997

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

lib/SIL/IR/AbstractionPattern.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1366,7 +1366,14 @@ AbstractionPattern::getFunctionThrownErrorType(
13661366
if (!substErrorType)
13671367
return std::nullopt;
13681368

1369-
return std::make_pair(AbstractionPattern(*substErrorType),
1369+
// FIXME: This is actually unsound. The most opaque form of
1370+
// `(T) throws(U) -> V` should actually be
1371+
// `(T) throws(any Error) -> V`.
1372+
auto pattern = ((*substErrorType)->isErrorExistentialType()
1373+
? AbstractionPattern(*substErrorType)
1374+
: AbstractionPattern::getOpaque());
1375+
1376+
return std::make_pair(pattern,
13701377
(*substErrorType)->getCanonicalType());
13711378
}
13721379

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: %target-swift-emit-silgen %s
2+
// RUN: %target-swift-emit-silgen %s -enable-library-evolution
3+
// RUN: %target-swift-emit-silgen %s -enable-testing
4+
// RUN: %target-swift-emit-silgen %s -enable-library-evolution -enable-testing
5+
6+
public struct Visitor<Node, Failure: Error> {
7+
public var visit: (Node) throws(Failure) -> Void
8+
}

0 commit comments

Comments
 (0)