Skip to content

Commit af85e06

Browse files
Merge pull request #83086 from kateinoigakukun/yt/fix-isolated-conformance-static-link
2 parents 8ebbd09 + c0b4727 commit af85e06

File tree

5 files changed

+58
-64
lines changed

5 files changed

+58
-64
lines changed

Runtimes/Core/Concurrency/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ add_library(swift_Concurrency
1616
ExecutorImpl.cpp
1717
ExecutorChecks.cpp
1818
GlobalExecutor.cpp
19-
Setup.cpp
2019
Task.cpp
2120
TaskAlloc.cpp
2221
TaskGroup.cpp

stdlib/public/Concurrency/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ set(SWIFT_RUNTIME_CONCURRENCY_C_SOURCES
8484
Error.cpp
8585
ExecutorBridge.cpp
8686
ExecutorChecks.cpp
87-
Setup.cpp
8887
Task.cpp
8988
TaskAlloc.cpp
9089
TaskStatus.cpp

stdlib/public/Concurrency/Setup.cpp

Lines changed: 0 additions & 56 deletions
This file was deleted.

stdlib/public/Concurrency/Task.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,6 +1875,60 @@ static void swift_task_startOnMainActorImpl(AsyncTask* task) {
18751875
_swift_task_setCurrent(originalTask);
18761876
}
18771877

1878+
// ==== Load-time setup code ----------------------------------------------------
1879+
//
1880+
// The ctor below is placed here so that it must always be linked into the final
1881+
// image even if the libswift_Concurrency is linked in as a static library.
1882+
1883+
#if !SWIFT_CONCURRENCY_EMBEDDED
1884+
1885+
// Helper macros for figuring out the mangled name of a context descriptor.
1886+
#define DESCRIPTOR_MANGLING_SUFFIX_Structure Mn
1887+
#define DESCRIPTOR_MANGLING_SUFFIX_Class Mn
1888+
#define DESCRIPTOR_MANGLING_SUFFIX_Enum Mn
1889+
#define DESCRIPTOR_MANGLING_SUFFIX_Protocol Mp
1890+
1891+
#define DESCRIPTOR_MANGLING_SUFFIX_(X) X
1892+
#define DESCRIPTOR_MANGLING_SUFFIX(KIND) \
1893+
DESCRIPTOR_MANGLING_SUFFIX_(DESCRIPTOR_MANGLING_SUFFIX_##KIND)
1894+
1895+
#define DESCRIPTOR_MANGLING_(CHAR, SUFFIX) $sSc##CHAR##SUFFIX
1896+
#define DESCRIPTOR_MANGLING(CHAR, SUFFIX) DESCRIPTOR_MANGLING_(CHAR, SUFFIX)
1897+
1898+
// Declare context descriptors for all of the concurrency descriptors with
1899+
// standard manglings.
1900+
#define STANDARD_TYPE(KIND, MANGLING, TYPENAME)
1901+
#define STANDARD_TYPE_CONCURRENCY(KIND, MANGLING, TYPENAME) \
1902+
extern "C" const swift::ContextDescriptor DESCRIPTOR_MANGLING( \
1903+
MANGLING, DESCRIPTOR_MANGLING_SUFFIX(KIND));
1904+
#include "swift/Demangling/StandardTypesMangling.def"
1905+
1906+
// Defined in Swift, redeclared here so we can register it with the runtime.
1907+
extern "C" SWIFT_CC(swift)
1908+
bool _swift_task_isCurrentGlobalActor(
1909+
const swift::Metadata *, const swift::WitnessTable *);
1910+
1911+
// Register our type descriptors with standard manglings when the concurrency
1912+
// runtime is loaded. This allows the runtime to quickly resolve those standard
1913+
// manglings.
1914+
SWIFT_ALLOWED_RUNTIME_GLOBAL_CTOR_BEGIN
1915+
__attribute__((constructor)) static void setupStandardConcurrencyDescriptors() {
1916+
static const swift::ConcurrencyStandardTypeDescriptors descriptors = {
1917+
#define STANDARD_TYPE(KIND, MANGLING, TYPENAME)
1918+
#define STANDARD_TYPE_CONCURRENCY(KIND, MANGLING, TYPENAME) \
1919+
&DESCRIPTOR_MANGLING(MANGLING, DESCRIPTOR_MANGLING_SUFFIX(KIND)),
1920+
#include "swift/Demangling/StandardTypesMangling.def"
1921+
};
1922+
_swift_registerConcurrencyRuntime(
1923+
&descriptors,
1924+
&_swift_task_isCurrentGlobalActor);
1925+
}
1926+
SWIFT_ALLOWED_RUNTIME_GLOBAL_CTOR_END
1927+
1928+
#endif
1929+
1930+
// ==== Back-deploy hooks -------------------------------------------------------
1931+
18781932
#define OVERRIDE_TASK COMPATIBILITY_OVERRIDE
18791933

18801934
#ifdef SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT

test/Concurrency/Runtime/isolated_conformance.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55
// REQUIRES: concurrency_runtime
66
// UNSUPPORTED: back_deployment_runtime
77

8-
// FIXME: WebAssembly doesn't currently have a good way to install the
9-
// "isCurrentGlobalActor" hook on which this checking depends. Disable
10-
// the test for the moment.
11-
// UNSUPPORTED: wasm
12-
// UNSUPPORTED: CPU=wasm32
13-
148
protocol P {
159
func f()
1610
}
@@ -208,6 +202,10 @@ await Task.detached { @SomeGlobalActor in
208202
print("Testing a separate task off the main actor")
209203
await Task.detached {
210204
if #available(SwiftStdlib 6.2, *) {
205+
// Skip tests on platforms that use the same executor for the main
206+
// actor and the global concurrent executor.
207+
guard Task.defaultExecutor !== MainActor.executor else { return }
208+
211209
precondition(!tryCastToP(mc))
212210
precondition(!tryCastToP(wrappedMC))
213211

0 commit comments

Comments
 (0)