enforce under strict concurrency that globals and statics be either isolated to a global actor or Sendable plus immutable

rdar://81629027 Global and static variable data-race safety
This commit is contained in:
Sophia Poirier
2023-08-16 17:37:01 -07:00
parent 7b3916e4f1
commit 936ab20e5d
6 changed files with 150 additions and 78 deletions

View File

@@ -953,14 +953,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
if (Opts.isSwiftVersionAtLeast(6)) {
Opts.StrictConcurrencyLevel = StrictConcurrency::Complete;
} else if (const Arg *A = Args.getLastArg(OPT_strict_concurrency)) {
auto value =
llvm::StringSwitch<llvm::Optional<StrictConcurrency>>(A->getValue())
.Case("minimal", StrictConcurrency::Minimal)
.Case("targeted", StrictConcurrency::Targeted)
.Case("complete", StrictConcurrency::Complete)
.Default(llvm::None);
if (value)
if (auto value = parseStrictConcurrency(A->getValue()))
Opts.StrictConcurrencyLevel = *value;
else
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,