That seems to be a bug. The interaction between #isolation, nonisolated(nonsending), and Swift 5 causes #isolation to erroneously assume that the actor passed in from nonisolated(nonsending) represents the function’s static isolation. In contrast, Swift 6 correctly determines that they are all statically nonisolated. #isolation represents static isolation, whereas nonisolated(nonsending) represents dynamic isolation, or more precisely the executor on which the function should execute at runtime. However, the same erroneous behavior (in my opinion) appears in the devsnapshot and nightly builds. Perhaps I am misunderstanding something, but if that is true then I am quite confused.