Skip to content

Commit a182190

Browse files
nickolas-pohiletsktoso
authored andcommitted
Handle versioning of the IsolatedDeinit feature
1 parent 69aab26 commit a182190

21 files changed

+42
-29
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5960,6 +5960,9 @@ ERROR(isolated_deinit_no_isolation,none,
59605960
ERROR(isolated_deinit_on_value_type,none,
59615961
"only classes and actors can have isolated deinit",
59625962
())
5963+
ERROR(isolated_deinit_unavailable,none,
5964+
"isolated deinit is only available in %0 %1 or newer",
5965+
(StringRef, llvm::VersionTuple))
59635966

59645967
//------------------------------------------------------------------------------
59655968
// MARK: String Processing

include/swift/AST/FeatureAvailability.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ FEATURE(InitRawStructMetadata, (6, 0))
7676

7777
FEATURE(LayoutStringValueWitnesses, (6, 1))
7878
FEATURE(CreateTaskWithConsumedFunction, (6, 1))
79+
FEATURE(IsolatedDeinit, (6, 1))
7980

8081
FEATURE(TaskExecutor, FUTURE)
8182
FEATURE(Differentiation, FUTURE)

lib/Sema/TypeCheckAttr.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
112112
}
113113

114114
void diagnoseIsolatedDeinitInValueTypes(DeclAttribute *attr) {
115+
auto &C = D->getASTContext();
116+
115117
if (isa<DestructorDecl>(D)) {
116118
if (auto nominal = dyn_cast<NominalTypeDecl>(D->getDeclContext())) {
117119
if (!isa<ClassDecl>(nominal)) {
@@ -120,6 +122,13 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
120122
return;
121123
}
122124
}
125+
126+
TypeChecker::checkAvailability(
127+
attr->getRange(), C.getIsolatedDeinitAvailability(),
128+
D->getDeclContext(),
129+
[&](StringRef platformName, llvm::VersionTuple version) {
130+
return diagnoseAndRemoveAttr(attr, diag::isolated_deinit_unavailable, platformName, version);
131+
});
123132
}
124133
}
125134

stdlib/public/Concurrency/Executor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ internal final class DispatchQueueShim: @unchecked Sendable, SerialExecutor {
541541
#endif // SWIFT_CONCURRENCY_USES_DISPATCH
542542

543543

544-
@available(SwiftStdlib 5.6, *) // TODO: Clarify version
544+
@available(SwiftStdlib 6.1, *)
545545
@_silgen_name("swift_task_deinitOnExecutor")
546546
@usableFromInline
547547
internal func _deinitOnExecutor(_ object: __owned AnyObject,

test/Concurrency/Runtime/actor_deinit_escaping_self.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift( -target %target-swift-5.1-abi-triple %import-libdispatch -parse-as-library)
1+
// RUN: %target-run-simple-swift( -target %target-future-triple %import-libdispatch -parse-as-library)
22

33
// REQUIRES: executable_test
44
// REQUIRES: libdispatch

test/Concurrency/Runtime/actor_recursive_deinit.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-target %target-swift-5.1-abi-triple -parse-stdlib -parse-as-library) | %FileCheck %s
1+
// RUN: %target-run-simple-swift(-target %target-future-triple -parse-stdlib -parse-as-library) | %FileCheck %s
22

33
// REQUIRES: executable_test
44
// REQUIRES: concurrency

test/Concurrency/Runtime/async_task_locals_isolated_deinit.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-build-swift -plugin-path %swift-plugin-dir -target %target-swift-5.1-abi-triple -parse-stdlib %import-libdispatch %s -o %t/a.out
2+
// RUN: %target-build-swift -plugin-path %swift-plugin-dir -target %target-future-triple -parse-stdlib %import-libdispatch %s -o %t/a.out
33
// RUN: %target-codesign %t/a.out
44
// RUN: %env-SWIFT_IS_CURRENT_EXECUTOR_LEGACY_MODE_OVERRIDE=swift6 %target-run %t/a.out
55

test/Concurrency/Runtime/isolated_deinit_main_sync.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-target %target-swift-5.1-abi-triple) | %FileCheck %s
1+
// RUN: %target-run-simple-swift(-target %target-future-triple) | %FileCheck %s
22

33
// REQUIRES: executable_test
44
// REQUIRES: concurrency

test/Concurrency/deinit_isolation.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -parse-as-library -emit-silgen -verify %s
2-
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -parse-as-library -emit-silgen -DSILGEN %s | %FileCheck %s
3-
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -parse-as-library -emit-silgen -DSILGEN %s | %FileCheck -check-prefix=CHECK-SYMB %s
1+
// RUN: %target-swift-frontend -target %target-future-triple -parse-as-library -emit-silgen -verify %s
2+
// RUN: %target-swift-frontend -target %target-future-triple -parse-as-library -emit-silgen -DSILGEN %s | %FileCheck %s
3+
// RUN: %target-swift-frontend -target %target-future-triple -parse-as-library -emit-silgen -DSILGEN %s | %FileCheck -check-prefix=CHECK-SYMB %s
44

55
// REQUIRES: concurrency
66

test/Concurrency/deinit_isolation_import/test.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// RUN: cp -R $INPUT_DIR/Alpha.framework %t/Frameworks/
44
// RUN: %empty-directory(%t/Frameworks/Alpha.framework/Modules/Alpha.swiftmodule)
55
// RUN: %empty-directory(%t/Frameworks/Alpha.framework/Headers/)
6-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -disable-implicit-string-processing-module-import -parse-as-library -module-name Alpha \
6+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -disable-implicit-string-processing-module-import -parse-as-library -disable-availability-checking -module-name Alpha \
77
// RUN: -emit-module -o %t/Frameworks/Alpha.framework/Modules/Alpha.swiftmodule/%module-target-triple.swiftmodule \
88
// RUN: -enable-objc-interop -disable-objc-attr-requires-foundation-module \
99
// RUN: -emit-objc-header -emit-objc-header-path %t/Frameworks/Alpha.framework/Headers/Alpha-Swift.h $INPUT_DIR/Alpha.swift

0 commit comments

Comments
 (0)