@@ -969,9 +969,6 @@ static bool ParseEnabledFeatureArgs(LangOptions &Opts, ArgList &Args,
969969 if (Args.hasArg (OPT_strict_memory_safety))
970970 Opts.enableFeature (Feature::StrictMemorySafety);
971971
972- if (Opts.hasFeature (Feature::UnspecifiedMeansMainActorIsolated))
973- Opts.enableFeature (Feature::InferIsolatedConformances);
974-
975972 return HadError;
976973}
977974
@@ -1817,6 +1814,27 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
18171814 Opts.DisableDynamicActorIsolation |=
18181815 Args.hasArg (OPT_disable_dynamic_actor_isolation);
18191816
1817+ if (const Arg *A = Args.getLastArg (options::OPT_default_isolation)) {
1818+ auto behavior =
1819+ llvm::StringSwitch<std::optional<DefaultIsolation>>(A->getValue ())
1820+ .Case (" MainActor" , DefaultIsolation::MainActor)
1821+ .Case (" nonisolated" , DefaultIsolation::Nonisolated)
1822+ .Default (std::nullopt );
1823+
1824+ if (behavior) {
1825+ Opts.DefaultIsolationBehavior = *behavior;
1826+ } else {
1827+ Diags.diagnose (SourceLoc (), diag::error_invalid_arg_value,
1828+ A->getAsString (Args), A->getValue ());
1829+ HadError = true ;
1830+ }
1831+ } else {
1832+ Opts.DefaultIsolationBehavior = DefaultIsolation::Nonisolated;
1833+ }
1834+
1835+ if (Opts.DefaultIsolationBehavior == DefaultIsolation::MainActor)
1836+ Opts.enableFeature (Feature::InferIsolatedConformances);
1837+
18201838#if !defined(NDEBUG) && SWIFT_ENABLE_EXPERIMENTAL_PARSER_VALIDATION
18211839 // / Enable round trip parsing via the new swift parser unless it is disabled
18221840 // / explicitly. The new Swift parser can have mismatches with C++ parser -
0 commit comments