Skip to content

Commit 7b8f76e

Browse files
authored
Merge pull request #73007 from xedin/promote-dynamic-actor-isolation-to-upcoming-feature
[SE-0423] Promote `DynamicActorIsolation` to an upcoming feature and add a way to disable checks
2 parents fb2f49c + 72eb8ab commit 7b8f76e

20 files changed

+417
-82
lines changed

Diff for: include/swift/AST/DiagnosticsSema.def

-2
Original file line numberDiff line numberDiff line change
@@ -5697,8 +5697,6 @@ ERROR(preconcurrency_not_inheritance_clause,none,
56975697
"'preconcurrency' attribute only applies in inheritance clauses", ())
56985698
ERROR(preconcurrency_not_existential,none,
56995699
"'preconcurrency' attribute cannot apply to non-protocol type %0", (Type))
5700-
ERROR(preconcurrency_attr_disabled,none,
5701-
"attribute requires '-enable-experimental-feature DynamicActorIsolation'", ())
57025700

57035701
ERROR(redundant_any_in_existential,none,
57045702
"redundant 'any' in type %0",

Diff for: include/swift/Basic/Features.def

+1-5
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ UPCOMING_FEATURE(GlobalConcurrency, 412, 6)
191191
UPCOMING_FEATURE(InferSendableFromCaptures, 418, 6)
192192
UPCOMING_FEATURE(ImplicitOpenExistentials, 352, 6)
193193
UPCOMING_FEATURE(RegionBasedIsolation, 414, 6)
194+
UPCOMING_FEATURE(DynamicActorIsolation, 423, 6)
194195
UPCOMING_FEATURE(MoveOnlyPartialConsumption, 429, 6)
195196

196197
// Swift 7
@@ -354,11 +355,6 @@ EXPERIMENTAL_FEATURE(GroupActorErrors, true)
354355
// Allow for the 'transferring' keyword to be applied to arguments and results.
355356
EXPERIMENTAL_FEATURE(TransferringArgsAndResults, true)
356357

357-
// Enable `@preconcurrency` attribute on protocol conformances and runtime checks
358-
// of actor isolation in @obj thunks and arguments of APIs that haven't yet adopted
359-
// strict concurrency checking.
360-
EXPERIMENTAL_FEATURE(DynamicActorIsolation, false)
361-
362358
// Allow for `switch` of noncopyable values to be borrowing or consuming.
363359
EXPERIMENTAL_FEATURE(BorrowingSwitch, true)
364360

Diff for: include/swift/Basic/LangOptions.h

+8
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ namespace swift {
593593
/// type-checking, SIL verification, and IR emission,
594594
bool BypassResilienceChecks = false;
595595

596+
/// Disables `DynamicActorIsolation` feature.
597+
bool DisableDynamicActorIsolation = false;
598+
596599
/// Whether or not to allow experimental features that are only available
597600
/// in "production".
598601
#ifdef NDEBUG
@@ -605,6 +608,11 @@ namespace swift {
605608
return ActiveConcurrencyModel == ConcurrencyModel::TaskToThread;
606609
}
607610

611+
bool isDynamicActorIsolationCheckingEnabled() const {
612+
return !DisableDynamicActorIsolation &&
613+
hasFeature(Feature::DynamicActorIsolation);
614+
}
615+
608616
LangOptions();
609617

610618
/// Sets the target we are building for and updates platform conditions

Diff for: include/swift/Option/Options.td

+5
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,11 @@ def disable_actor_data_race_checks :
817817
Flags<[FrontendOption, DoesNotAffectIncrementalBuild]>,
818818
HelpText<"Disable runtime checks for actor data races">;
819819

820+
def disable_dynamic_actor_isolation :
821+
Flag<["-"], "disable-dynamic-actor-isolation">,
822+
Flags<[FrontendOption, DoesNotAffectIncrementalBuild]>,
823+
HelpText<"Disable dynamic actor isolation checks">;
824+
820825
def enable_bare_slash_regex : Flag<["-"], "enable-bare-slash-regex">,
821826
Flags<[FrontendOption, ModuleInterfaceOption]>,
822827
HelpText<"Enable the use of forward slash regular-expression literal syntax">;

Diff for: lib/AST/FeatureSet.cpp

+1-23
Original file line numberDiff line numberDiff line change
@@ -645,29 +645,7 @@ static bool usesFeatureTransferringArgsAndResults(Decl *decl) {
645645
return false;
646646
}
647647

648-
static bool usesFeatureDynamicActorIsolation(Decl *decl) {
649-
auto usesPreconcurrencyConformance = [&](const InheritedTypes &inherited) {
650-
return llvm::any_of(
651-
inherited.getEntries(),
652-
[](const InheritedEntry &entry) { return entry.isPreconcurrency(); });
653-
};
654-
655-
if (auto *T = dyn_cast<TypeDecl>(decl))
656-
return usesPreconcurrencyConformance(T->getInherited());
657-
658-
if (auto *E = dyn_cast<ExtensionDecl>(decl)) {
659-
// If type has `@preconcurrency` conformance(s) all of its
660-
// extensions have to be guarded by the flag too.
661-
if (auto *T = dyn_cast<TypeDecl>(E->getExtendedNominal())) {
662-
if (usesPreconcurrencyConformance(T->getInherited()))
663-
return true;
664-
}
665-
666-
return usesPreconcurrencyConformance(E->getInherited());
667-
}
668-
669-
return false;
670-
}
648+
UNINTERESTING_FEATURE(DynamicActorIsolation)
671649

672650
UNINTERESTING_FEATURE(BorrowingSwitch)
673651

Diff for: lib/Driver/ToolChains.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ void ToolChain::addCommonFrontendArgs(const OutputInfo &OI,
264264
inputArgs.AddLastArg(arguments,
265265
options::OPT_enable_actor_data_race_checks,
266266
options::OPT_disable_actor_data_race_checks);
267+
inputArgs.AddLastArg(arguments, options::OPT_disable_dynamic_actor_isolation);
267268
inputArgs.AddLastArg(arguments, options::OPT_warn_concurrency);
268269
inputArgs.AddLastArg(arguments, options::OPT_strict_concurrency);
269270
inputArgs.AddAllArgs(arguments, options::OPT_enable_experimental_feature);

Diff for: lib/Frontend/CompilerInvocation.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1535,6 +1535,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
15351535
}
15361536
}
15371537

1538+
Opts.DisableDynamicActorIsolation |=
1539+
Args.hasArg(OPT_disable_dynamic_actor_isolation);
1540+
15381541
#if SWIFT_ENABLE_EXPERIMENTAL_PARSER_VALIDATION
15391542
/// Enable round trip parsing via the new swift parser unless it is disabled
15401543
/// explicitly. The new Swift parser can have mismatches with C++ parser -

Diff for: lib/SILGen/SILGenBridging.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -1593,14 +1593,12 @@ void SILGenFunction::emitNativeToForeignThunk(SILDeclRef thunk) {
15931593
loc.markAutoGenerated();
15941594
Scope scope(Cleanups, CleanupLocation(loc));
15951595

1596-
bool emitExecutorPrecondition =
1597-
getASTContext().LangOpts.hasFeature(Feature::DynamicActorIsolation);
1598-
15991596
std::optional<ActorIsolation> isolation;
16001597
if (F.isAsync()) {
16011598
if (thunk.hasDecl())
16021599
isolation = getActorIsolation(thunk.getDecl());
1603-
} else if (emitExecutorPrecondition) {
1600+
} else if (getASTContext()
1601+
.LangOpts.isDynamicActorIsolationCheckingEnabled()) {
16041602
if (thunk.hasDecl()) {
16051603
isolation = getActorIsolation(thunk.getDecl());
16061604
} else if (auto globalActor = nativeInfo.FormalType->getGlobalActor()) {

Diff for: lib/SILGen/SILGenPoly.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -7021,7 +7021,10 @@ void SILGenFunction::emitProtocolWitness(
70217021

70227022
if (!F.isAsync()) {
70237023
assert(isPreconcurrency);
7024-
emitPreconditionCheckExpectedExecutor(loc, *enterIsolation, actorSelf);
7024+
7025+
if (getASTContext().LangOpts.isDynamicActorIsolationCheckingEnabled()) {
7026+
emitPreconditionCheckExpectedExecutor(loc, *enterIsolation, actorSelf);
7027+
}
70257028
} else {
70267029
emitHopToTargetActor(loc, enterIsolation, actorSelf);
70277030
}

Diff for: lib/Sema/CSApply.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7462,7 +7462,7 @@ Expr *ExprRewriter::coerceToType(Expr *expr, Type toType,
74627462
}
74637463
}
74647464

7465-
if (ctx.LangOpts.hasFeature(Feature::DynamicActorIsolation)) {
7465+
if (ctx.LangOpts.isDynamicActorIsolationCheckingEnabled()) {
74667466
// Passing a synchronous global actor-isolated function value and
74677467
// parameter that expects a synchronous non-isolated function type could
74687468
// require a runtime check to ensure that function is always called in

Diff for: lib/Sema/TypeCheckType.cpp

+11-18
Original file line numberDiff line numberDiff line change
@@ -3317,28 +3317,21 @@ TypeResolver::resolveAttributedType(TypeRepr *repr, TypeResolutionOptions option
33173317
}
33183318

33193319
if (auto preconcurrencyAttr = claim<PreconcurrencyTypeAttr>(attrs)) {
3320-
auto &ctx = getASTContext();
3321-
if (ctx.LangOpts.hasFeature(Feature::DynamicActorIsolation)) {
3322-
if (ty->hasError())
3323-
return ty;
3324-
3325-
if (!options.is(TypeResolverContext::Inherited) ||
3326-
getDeclContext()->getSelfProtocolDecl()) {
3327-
diagnoseInvalid(repr, preconcurrencyAttr->getAtLoc(),
3328-
diag::preconcurrency_not_inheritance_clause);
3329-
ty = ErrorType::get(getASTContext());
3330-
} else if (!ty->isConstraintType()) {
3331-
diagnoseInvalid(repr, preconcurrencyAttr->getAtLoc(),
3332-
diag::preconcurrency_not_existential, ty);
3333-
ty = ErrorType::get(getASTContext());
3334-
}
3320+
if (ty->hasError())
3321+
return ty;
33353322

3336-
// Nothing to record in the type.
3337-
} else {
3323+
if (!options.is(TypeResolverContext::Inherited) ||
3324+
getDeclContext()->getSelfProtocolDecl()) {
33383325
diagnoseInvalid(repr, preconcurrencyAttr->getAtLoc(),
3339-
diag::preconcurrency_attr_disabled);
3326+
diag::preconcurrency_not_inheritance_clause);
3327+
ty = ErrorType::get(getASTContext());
3328+
} else if (!ty->isConstraintType()) {
3329+
diagnoseInvalid(repr, preconcurrencyAttr->getAtLoc(),
3330+
diag::preconcurrency_not_existential, ty);
33403331
ty = ErrorType::get(getASTContext());
33413332
}
3333+
3334+
// Nothing to record in the type.
33423335
}
33433336

33443337
if (auto retroactiveAttr = claim<RetroactiveTypeAttr>(attrs)) {

Diff for: test/ClangImporter/preconcurrency_conformances.swift

+80-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -disable-availability-checking -enable-experimental-feature DynamicActorIsolation -emit-silgen %s | %FileCheck %s
1+
// RUN: %empty-directory(%t/src)
2+
// RUN: split-file %s %t/src
3+
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -disable-availability-checking -enable-upcoming-feature DynamicActorIsolation -emit-silgen -module-name preconcurrency_conformances %t/src/checks.swift | %FileCheck %t/src/checks.swift
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -disable-availability-checking -swift-version 6 -disable-dynamic-actor-isolation -emit-silgen -module-name preconcurrency_conformances %t/src/checks_disabled.swift | %FileCheck %t/src/checks_disabled.swift
26

37
// REQUIRES: asserts
48
// REQUIRES: concurrency
59
// REQUIRES: objc_interop
610

11+
//--- checks.swift
712
import Foundation
813

914
actor MyActor {
@@ -130,3 +135,77 @@ class Sub : Super {
130135
// CHECK-NEXT: [[EXEC:%.*]] = extract_executor [[MAIN_ACTOR]] : $MainActor
131136
// CHECK: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
132137
// CHECK-NEXT: {{.*}} = apply [[PRECONDITION]]({{.*}}, [[EXEC]]) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
138+
139+
//--- checks_disabled.swift
140+
import Foundation
141+
142+
actor MyActor {
143+
}
144+
145+
@globalActor
146+
struct GlobalActor {
147+
static let shared: MyActor = MyActor()
148+
}
149+
150+
@objc protocol P {
151+
var data: String? { get set }
152+
153+
init()
154+
func test() -> String?
155+
}
156+
157+
@MainActor
158+
final class K : @preconcurrency P {
159+
var data: String? {
160+
get { nil }
161+
set {}
162+
}
163+
164+
init() {}
165+
@GlobalActor func test() -> String? { nil }
166+
}
167+
168+
// @objc K.data.getter
169+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances1KC4dataSSSgvgTo : $@convention(objc_method) (K) -> @autoreleased Optional<NSString>
170+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
171+
172+
// @objc K.data.setter
173+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances1KC4dataSSSgvsTo : $@convention(objc_method) (Optional<NSString>, K) -> ()
174+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
175+
176+
// @objc K.init()
177+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances1KCACycfcTo : $@convention(objc_method) (@owned K) -> @owned K
178+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
179+
180+
// @objc K.test()
181+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances1KC4testSSSgyFTo : $@convention(objc_method) (K) -> @autoreleased Optional<NSString>
182+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
183+
184+
@MainActor
185+
class TestObjCMethod {
186+
@objc func testImplicit() -> Int { 42 }
187+
188+
@GlobalActor
189+
@objc func testExplicit() {}
190+
}
191+
192+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances14TestObjCMethodC12testImplicitSiyFTo : $@convention(objc_method) (TestObjCMethod) -> Int
193+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
194+
195+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances14TestObjCMethodC12testExplicityyFTo : $@convention(objc_method) (TestObjCMethod) -> ()
196+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
197+
198+
@objcMembers
199+
class Super {
200+
@MainActor func test() {}
201+
}
202+
203+
class Sub : Super {
204+
override func test() {}
205+
}
206+
207+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances5SuperC4testyyFTo : $@convention(objc_method) (Super) -> ()
208+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()
209+
210+
// CHECK-LABEL: sil private [thunk] [ossa] @$s27preconcurrency_conformances3SubC4testyyFTo : $@convention(objc_method) (Sub) -> ()
211+
// CHECK-NOT: [[PRECONDITION:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Executor) -> ()

Diff for: test/Concurrency/dynamic_checks_for_func_refs_in_preconcurrency_apis.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// RUN: -I %t \
1313
// RUN: -disable-availability-checking \
1414
// RUN: -module-name Client \
15-
// RUN: -enable-experimental-feature DynamicActorIsolation \
15+
// RUN: -enable-upcoming-feature DynamicActorIsolation \
1616
// RUN: %t/src/Client.swift -verify | %FileCheck %s
1717

1818
// Delete swiftmodule to test building against swiftinterface
@@ -23,7 +23,7 @@
2323
// RUN: -I %t \
2424
// RUN: -disable-availability-checking \
2525
// RUN: -module-name Client \
26-
// RUN: -enable-experimental-feature DynamicActorIsolation \
26+
// RUN: -enable-upcoming-feature DynamicActorIsolation \
2727
// RUN: %t/src/Client.swift -verify | %FileCheck %s
2828

2929
// REQUIRES: asserts

Diff for: test/Concurrency/dynamic_checks_for_func_refs_in_preconcurrency_apis_objc.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -target arm64-apple-macosx10.15 -enable-experimental-feature DynamicActorIsolation -emit-silgen -verify %s | %FileCheck %s
1+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -target arm64-apple-macosx10.15 -enable-upcoming-feature DynamicActorIsolation -emit-silgen -verify %s | %FileCheck %s
22
// REQUIRES: objc_interop
33
// REQUIRES: asserts
44

Diff for: test/Concurrency/preconcurrency_conformances.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking %s -emit-sil -o /dev/null -verify -enable-experimental-feature DynamicActorIsolation -strict-concurrency=complete -verify-additional-prefix complete-tns-
1+
// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking %s -emit-sil -o /dev/null -verify -enable-upcoming-feature DynamicActorIsolation -strict-concurrency=complete -verify-additional-prefix complete-tns-
22

33
// REQUIRES: concurrency
44
// REQUIRES: asserts

Diff for: test/Interpreter/preconcurrency_conformances.swift

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@
1212
// RUN: -target %target-cpu-apple-macosx10.15 \
1313
// RUN: -I %t -L %t -l Interface \
1414
// RUN: -emit-module-interface-path %t/Types.swiftinterface \
15-
// RUN: -Xfrontend -enable-experimental-feature -Xfrontend DynamicActorIsolation
15+
// RUN: -Xfrontend -enable-upcoming-feature -Xfrontend DynamicActorIsolation
1616

17-
// RUN: %target-build-swift -Xfrontend -enable-experimental-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash1.swift -o %t/crash1.out
17+
// RUN: %target-build-swift -Xfrontend -enable-upcoming-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash1.swift -o %t/crash1.out
1818
// RUN: %target-codesign %t/crash1.out
1919
// RUN: not --crash env SWIFT_UNEXPECTED_EXECUTOR_LOG_LEVEL=2 %target-run %t/crash1.out 2>&1 | %FileCheck %t/src/Crash1.swift
2020

21-
// RUN: %target-build-swift -Xfrontend -enable-experimental-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash2.swift -o %t/crash2.out
21+
// RUN: %target-build-swift -Xfrontend -enable-upcoming-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash2.swift -o %t/crash2.out
2222
// RUN: %target-codesign %t/crash2.out
2323
// RUN: not --crash env SWIFT_UNEXPECTED_EXECUTOR_LOG_LEVEL=2 %target-run %t/crash2.out 2>&1 | %FileCheck %t/src/Crash2.swift
2424

25-
// RUN: %target-build-swift -Xfrontend -enable-experimental-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash3.swift -o %t/crash3.out
25+
// RUN: %target-build-swift -Xfrontend -enable-upcoming-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash3.swift -o %t/crash3.out
2626
// RUN: %target-codesign %t/crash3.out
2727
// RUN: not --crash env SWIFT_UNEXPECTED_EXECUTOR_LOG_LEVEL=2 %target-run %t/crash3.out 2>&1 | %FileCheck %t/src/Crash3.swift
2828

29-
// RUN: %target-build-swift -Xfrontend -enable-experimental-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash4.swift -o %t/crash4.out
29+
// RUN: %target-build-swift -Xfrontend -enable-upcoming-feature -Xfrontend DynamicActorIsolation -I %t -L %t -l Types %t/src/Crash4.swift -o %t/crash4.out
3030
// RUN: %target-codesign %t/crash4.out
3131
// RUN: not --crash env SWIFT_UNEXPECTED_EXECUTOR_LOG_LEVEL=2 %target-run %t/crash4.out 2>&1 | %FileCheck %t/src/Crash4.swift
3232

0 commit comments

Comments
 (0)