diff --git a/lib/Sema/CodeSynthesis.cpp b/lib/Sema/CodeSynthesis.cpp index cdffea876a224..f94584a2a395a 100644 --- a/lib/Sema/CodeSynthesis.cpp +++ b/lib/Sema/CodeSynthesis.cpp @@ -1703,9 +1703,14 @@ SynthesizeDefaultInitRequest::evaluate(Evaluator &evaluator, ImplicitConstructorKind::DefaultDistributedActor : ImplicitConstructorKind::Default; if (auto ctor = createImplicitConstructor(decl, ctorKind, ctx)) { + if (auto isolation = decl->getDefaultActorIsolation()) { + /// Ensure the synthesized default initializer inherits the class's + /// default actor isolation (e.g., @MainActor) to avoid + /// override-isolation mismatches in subclasses. + ctor->setActorIsolation(isolation); + } // Add the constructor. decl->addMember(ctor); - // Lazily synthesize an empty body for the default constructor. ctor->setBodySynthesizer(synthesizeSingleReturnFunctionBody); return ctor; diff --git a/test/Concurrency/default_actor_isolation_initializer.swift b/test/Concurrency/default_actor_isolation_initializer.swift new file mode 100644 index 0000000000000..63403face1a6d --- /dev/null +++ b/test/Concurrency/default_actor_isolation_initializer.swift @@ -0,0 +1,7 @@ +// RUN: %target-typecheck-verify-swift -enable-upcoming-feature GlobalActorIsMainActor -enable-upcoming-feature RegionBasedIsolation +// expected-no-diagnostics + +@MainActor +class Thing {} + +class SubThing: Thing {}