From 726d78d0119c554f0a22baddb26c812abcdf064a Mon Sep 17 00:00:00 2001 From: Hamish Knight Date: Wed, 23 Apr 2025 12:54:17 +0100 Subject: [PATCH] [Sema] Add missing null check for Type `getType` here can return a null type if the queried expression isn't part of the solution, which can currently happen for code completion. I'm working on a more principled fix for this, but until then this is a low-risk fix that will unblock the stress tester and can be cherry-picked to 6.2. rdar://149759542 --- lib/Sema/TypeCheckConcurrency.cpp | 8 +++++--- test/SourceKit/CodeComplete/issue-80985.swift | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 test/SourceKit/CodeComplete/issue-80985.swift diff --git a/lib/Sema/TypeCheckConcurrency.cpp b/lib/Sema/TypeCheckConcurrency.cpp index ad65ac50991fd..02ca2766edb39 100644 --- a/lib/Sema/TypeCheckConcurrency.cpp +++ b/lib/Sema/TypeCheckConcurrency.cpp @@ -4703,9 +4703,11 @@ ActorIsolation ActorIsolationChecker::determineClosureIsolation( // `nonisolated(nonsending)` inferred from the context makes // the closure caller isolated. - if (auto *closureTy = getType(closure)->getAs()) { - if (closureTy->getIsolation().isNonIsolatedCaller()) - return ActorIsolation::forCallerIsolationInheriting(); + if (auto closureTy = getType(closure)) { + if (auto *closureFnTy = closureTy->getAs()) { + if (closureFnTy->getIsolation().isNonIsolatedCaller()) + return ActorIsolation::forCallerIsolationInheriting(); + } } // If a closure has an isolated parameter, it is isolated to that diff --git a/test/SourceKit/CodeComplete/issue-80985.swift b/test/SourceKit/CodeComplete/issue-80985.swift new file mode 100644 index 0000000000000..de7002fe44519 --- /dev/null +++ b/test/SourceKit/CodeComplete/issue-80985.swift @@ -0,0 +1,13 @@ +// https://github.com/swiftlang/swift/issues/80985 +struct S { + func foo(_ fn: (T) -> U) -> S { fatalError() } +} + +func foo(xs: S<(Int, Int)>) { + _ = { + let y = xs + .foo{ $1 } + .foo{ $0 } + // RUN: %sourcekitd-test -req=complete -pos=%(line-1):11 %s -- %s + } +}