@@ -969,9 +969,6 @@ static bool ParseEnabledFeatureArgs(LangOptions &Opts, ArgList &Args,
969
969
if (Args.hasArg (OPT_strict_memory_safety))
970
970
Opts.enableFeature (Feature::StrictMemorySafety);
971
971
972
- if (Opts.hasFeature (Feature::UnspecifiedMeansMainActorIsolated))
973
- Opts.enableFeature (Feature::InferIsolatedConformances);
974
-
975
972
return HadError;
976
973
}
977
974
@@ -1817,6 +1814,27 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
1817
1814
Opts.DisableDynamicActorIsolation |=
1818
1815
Args.hasArg (OPT_disable_dynamic_actor_isolation);
1819
1816
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
+
1820
1838
#if !defined(NDEBUG) && SWIFT_ENABLE_EXPERIMENTAL_PARSER_VALIDATION
1821
1839
// / Enable round trip parsing via the new swift parser unless it is disabled
1822
1840
// / explicitly. The new Swift parser can have mismatches with C++ parser -
0 commit comments