Skip to content

Commit b9a2730

Browse files
authored
Merge branch 'main' into automerge/merge-main-2025-09-29_09-02
2 parents 3144d7b + 7b44829 commit b9a2730

File tree

319 files changed

+12129
-2288
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

319 files changed

+12129
-2288
lines changed

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ xcode_trim_whitespace_on_empty_lines = true
1111

1212
[*.{yml,yaml}]
1313
indent_size = 2
14+
15+
[CMakeLists.txt]
16+
indent_size = 2

.github/scripts/linux_pre_build.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ if command -v apt-get >/dev/null 2>&1 ; then # bookworm, noble, jammy
3131
# Android NDK
3232
dpkg_architecture="$(dpkg --print-architecture)"
3333
if [[ "$SKIP_ANDROID" != "1" ]] && [[ "$dpkg_architecture" == amd64 ]] ; then
34-
eval "$(cat /etc/lsb-release)"
35-
case "$DISTRIB_CODENAME" in
34+
eval "$(cat /etc/os-release)"
35+
case "$VERSION_CODENAME" in
3636
bookworm|jammy)
3737
: # Not available
3838
;;
3939
noble)
4040
apt-get install -y google-android-ndk-r26c-installer
4141
;;
4242
*)
43-
echo "Unknown distribution: $DISTRIB_CODENAME" >&2
43+
echo "Unable to fetch Android NDK for unknown Linux distribution: $VERSION_CODENAME" >&2
4444
exit 1
4545
esac
4646
else
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
##===----------------------------------------------------------------------===##
2+
##
3+
## This source file is part of the Swift open source project
4+
##
5+
## Copyright (c) 2025 Apple Inc. and the Swift project authors
6+
## Licensed under Apache License v2.0 with Runtime Library Exception
7+
##
8+
## See http://swift.org/LICENSE.txt for license information
9+
## See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
##
11+
##===----------------------------------------------------------------------===##
12+
13+
param (
14+
[switch]$SkipAndroid,
15+
[switch]$InstallCMake
16+
)
17+
18+
# winget isn't easily made available in containers, so use chocolatey
19+
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
20+
21+
if ($InstallCMake) {
22+
choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System' --apply-install-arguments-to-dependencies
23+
choco install -y ninja
24+
25+
Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
26+
refreshenv
27+
28+
# Let swiftc find the path to link.exe in the CMake smoke test
29+
$env:Path += ";$(Split-Path -Path "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" "-latest" -products Microsoft.VisualStudio.Product.BuildTools -find VC\Tools\MSVC\*\bin\HostX64\x64\link.exe)" -Parent)"
30+
}
31+
32+
if (-not $SkipAndroid) {
33+
choco install -y android-ndk
34+
35+
Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
36+
refreshenv
37+
38+
# Work around a bug in the package causing the env var to be set incorrectly
39+
$env:ANDROID_NDK_ROOT = $env:ANDROID_NDK_ROOT.replace('-windows.zip','')
40+
}

.github/workflows/automerge.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ jobs:
1010
name: Create PR to merge main into release branch
1111
uses: swiftlang/github-workflows/.github/workflows/create_automerge_pr.yml@main
1212
with:
13-
base_branch: release/6.2
13+
head_branch: release/6.2
14+
base_branch: main
1415
permissions:
1516
contents: write
1617
pull-requests: write

.github/workflows/pull_request.yml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,20 @@ jobs:
1313
name: Test
1414
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@main
1515
with:
16-
linux_os_versions: '["noble", "jammy", "rhel-ubi9"]'
16+
linux_os_versions: '["amazonlinux2", "bookworm", "noble", "jammy", "rhel-ubi9"]'
1717
linux_pre_build_command: ./.github/scripts/linux_pre_build.sh
1818
linux_build_command: 'swift test --no-parallel'
1919
linux_swift_versions: '["nightly-main", "nightly-6.2"]'
20+
windows_pre_build_command: 'Invoke-Program .\.github\scripts\windows_pre_build.ps1'
2021
windows_swift_versions: '["nightly-main"]'
21-
windows_build_command: 'swift test --no-parallel'
22+
windows_build_command: 'Invoke-Program swift test --no-parallel'
23+
enable_linux_static_sdk_build: true
24+
linux_static_sdk_build_command: SWIFTBUILD_STATIC_LINK=1 LLBUILD_STATIC_LINK=1 swift build
25+
enable_macos_checks: true
26+
macos_exclude_xcode_versions: "[{\"xcode_version\": \"16.2\"}]"
27+
macos_build_command:
28+
swift test &&
29+
/usr/bin/xcrun xcodebuild -workspace . -scheme SwiftBuild-Package -destination generic/platform=iOS
2230
cmake-smoke-test:
2331
name: cmake-smoke-test
2432
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@main
@@ -27,7 +35,10 @@ jobs:
2735
linux_pre_build_command: SKIP_ANDROID=1 INSTALL_CMAKE=1 ./.github/scripts/linux_pre_build.sh
2836
linux_build_command: 'swift package -Xbuild-tools-swiftc -DUSE_PROCESS_SPAWNING_WORKAROUND cmake-smoke-test --disable-sandbox --cmake-path `which cmake` --ninja-path `which ninja` --extra-cmake-arg -DCMAKE_C_COMPILER=`which clang` --extra-cmake-arg -DCMAKE_CXX_COMPILER=`which clang++` --extra-cmake-arg -DCMAKE_Swift_COMPILER=`which swiftc`'
2937
linux_swift_versions: '["nightly-main"]'
30-
windows_swift_versions: '[]'
38+
windows_pre_build_command: 'Invoke-Program .\.github\scripts\windows_pre_build.ps1 -SkipAndroid -InstallCMake'
39+
windows_swift_versions: '["nightly-main"]'
40+
windows_build_command: 'Invoke-Program swift package cmake-smoke-test --disable-sandbox --cmake-path (Get-Command cmake).Path --ninja-path (Get-Command ninja).Path --extra-cmake-arg "-DCMAKE_C_COMPILER=$((Get-Command clang).Path)" --extra-cmake-arg "-DCMAKE_CXX_COMPILER=$((Get-Command clang).Path)" --extra-cmake-arg "-DCMAKE_Swift_COMPILER=$((Get-Command swiftc).Path)" --extra-cmake-arg "-DCMAKE_STATIC_LIBRARY_PREFIX_Swift=lib" --extra-cmake-arg "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL"'
41+
3142
soundness:
3243
name: Soundness
3344
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main

.licenseignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
**/Package.swift
66
.dir-locals.el
77
.editorconfig
8+
.swift-version
89
CODEOWNERS
910
Package.swift

.swift-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6.2.0

CODEOWNERS

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
* @aciidgh @jakepetroules @mirza-garibovic @mhrawdon @neonichu @owenv
2-
*XCStrings* @matthewseaman @kulpreetchilana @jakepetroules @mirza-garibovic @mhrawdon @neonichu @owenv
3-
*StringCatalog* @matthewseaman @kulpreetchilana @jakepetroules @mirza-garibovic @mhrawdon @neonichu @owenv
4-
*Preview* @jonathanpenn @jakepetroules @mirza-garibovic @mhrawdon @neonichu @owenv
1+
* @aciidgh @jakepetroules @mhrawdon @neonichu @owenv
2+
*XCStrings* @matthewseaman @kulpreetchilana @jakepetroules @mhrawdon @neonichu @owenv
3+
*StringCatalog* @matthewseaman @kulpreetchilana @jakepetroules @mhrawdon @neonichu @owenv
4+
*Preview* @jonathanpenn @jakepetroules @mhrawdon @neonichu @owenv

Package.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ let appleOS = true
2020
let appleOS = false
2121
#endif
2222

23+
let isStaticBuild = Context.environment["SWIFTBUILD_STATIC_LINK"] != nil
2324
let useLocalDependencies = Context.environment["SWIFTCI_USE_LOCAL_DEPS"] != nil
2425
let useLLBuildFramework = Context.environment["SWIFTBUILD_LLBUILD_FWK"] != nil
2526

@@ -70,7 +71,11 @@ func swiftSettings(languageMode: SwiftLanguageMode) -> [SwiftSetting] {
7071
let package = Package(
7172
name: "SwiftBuild",
7273
defaultLocalization: "en",
73-
platforms: [.macOS("13.0"), .iOS("17.0"), .macCatalyst("17.0")],
74+
platforms: [
75+
.macOS(.v14),
76+
.iOS("17.0"),
77+
.macCatalyst("17.0"),
78+
],
7479
products: [
7580
.executable(name: "swbuild", targets: ["swbuild"]),
7681
.executable(name: "SWBBuildServiceBundle", targets: ["SWBBuildServiceBundle"]),
@@ -204,7 +209,7 @@ let package = Package(
204209
.product(name: "SystemPackage", package: "swift-system", condition: .when(platforms: [.linux, .openbsd, .android, .windows, .custom("freebsd")])),
205210
],
206211
exclude: ["CMakeLists.txt"],
207-
swiftSettings: swiftSettings(languageMode: .v5)),
212+
swiftSettings: swiftSettings(languageMode: .v6)),
208213
.target(
209214
name: "SWBCAS",
210215
dependencies: ["SWBUtil", "SWBCSupport"],
@@ -257,7 +262,7 @@ let package = Package(
257262
.target(
258263
name: "SWBWindowsPlatform",
259264
dependencies: ["SWBCore", "SWBMacro", "SWBUtil"],
260-
exclude: ["CMakeLists.txt"],
265+
exclude: ["CMakeLists.txt", "README.md"],
261266
resources: [.process("Specs")],
262267
swiftSettings: swiftSettings(languageMode: .v6)),
263268

@@ -369,7 +374,7 @@ let package = Package(
369374
// Perf tests
370375
.testTarget(
371376
name: "SWBBuildSystemPerfTests",
372-
dependencies: ["SWBBuildSystem", "SWBTestSupport"],
377+
dependencies: ["SWBBuildSystem", "SWBTestSupport", "SwiftBuildTestSupport"],
373378
swiftSettings: swiftSettings(languageMode: .v6)),
374379
.testTarget(
375380
name: "SWBCASPerfTests",
@@ -443,6 +448,12 @@ for target in package.targets {
443448
}
444449
}
445450

451+
if isStaticBuild {
452+
package.targets = package.targets.filter { target in
453+
target.type != .test && !target.name.hasSuffix("TestSupport")
454+
}
455+
}
456+
446457
// `SWIFTCI_USE_LOCAL_DEPS` configures if dependencies are locally available to build
447458
if useLocalDependencies {
448459
package.dependencies += [
@@ -455,11 +466,11 @@ if useLocalDependencies {
455466
}
456467
} else {
457468
package.dependencies += [
458-
.package(url: "https://github.com/swiftlang/swift-driver.git", branch: "release/6.2"),
469+
.package(url: "https://github.com/swiftlang/swift-driver.git", branch: "main"),
459470
.package(url: "https://github.com/apple/swift-system.git", .upToNextMajor(from: "1.5.0")),
460471
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.3"),
461472
]
462473
if !useLLBuildFramework {
463-
package.dependencies += [.package(url: "https://github.com/swiftlang/swift-llbuild.git", branch: "release/6.2"),]
474+
package.dependencies += [.package(url: "https://github.com/swiftlang/swift-llbuild.git", branch: "main"),]
464475
}
465476
}

Plugins/cmake-smoke-test/cmake-smoke-test.swift

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ struct CMakeSmokeTest: CommandPlugin {
3737
let extraCMakeArgs = args.extractOption(named: "extra-cmake-arg")
3838
Diagnostics.progress("Extra cmake args: \(extraCMakeArgs.joined(separator: " "))")
3939

40-
let moduleCachePath = context.pluginWorkDirectoryURL.appending(component: "module-cache").path()
40+
let moduleCachePath = try context.pluginWorkDirectoryURL.appending(component: "module-cache").filePath
4141

4242
let swiftBuildURL = context.package.directoryURL
4343
let swiftBuildBuildURL = context.pluginWorkDirectoryURL.appending(component: "swift-build")
44-
Diagnostics.progress("swift-build: \(swiftBuildURL.path())")
44+
try Diagnostics.progress("swift-build: \(swiftBuildURL.filePath)")
4545

4646
let swiftToolsSupportCoreURL = try findDependency("swift-tools-support-core", pluginContext: context)
4747
let swiftToolsSupportCoreBuildURL = context.pluginWorkDirectoryURL.appending(component: "swift-tools-support-core")
@@ -70,12 +70,12 @@ struct CMakeSmokeTest: CommandPlugin {
7070
sharedSwiftFlags += ["-sdk", sysrootPath]
7171
}
7272

73-
let cMakeProjectArgs = [
74-
"-DArgumentParser_DIR=\(swiftArgumentParserBuildURL.appending(components: "cmake", "modules").path())",
75-
"-DLLBuild_DIR=\(llbuildBuildURL.appending(components: "cmake", "modules").path())",
76-
"-DTSC_DIR=\(swiftToolsSupportCoreBuildURL.appending(components: "cmake", "modules").path())",
77-
"-DSwiftDriver_DIR=\(swiftDriverBuildURL.appending(components: "cmake", "modules").path())",
78-
"-DSwiftSystem_DIR=\(swiftSystemBuildURL.appending(components: "cmake", "modules").path())"
73+
let cMakeProjectArgs = try [
74+
"-DArgumentParser_DIR=\(swiftArgumentParserBuildURL.appending(components: "cmake", "modules").filePath)",
75+
"-DLLBuild_DIR=\(llbuildBuildURL.appending(components: "cmake", "modules").filePath)",
76+
"-DTSC_DIR=\(swiftToolsSupportCoreBuildURL.appending(components: "cmake", "modules").filePath)",
77+
"-DSwiftDriver_DIR=\(swiftDriverBuildURL.appending(components: "cmake", "modules").filePath)",
78+
"-DSwiftSystem_DIR=\(swiftSystemBuildURL.appending(components: "cmake", "modules").filePath)"
7979
]
8080

8181
let sharedCMakeArgs = [
@@ -86,34 +86,34 @@ struct CMakeSmokeTest: CommandPlugin {
8686
] + cMakeProjectArgs + extraCMakeArgs
8787

8888
Diagnostics.progress("Building swift-tools-support-core")
89-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftToolsSupportCoreURL.path()], workingDirectory: swiftToolsSupportCoreBuildURL)
89+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftToolsSupportCoreURL.filePath], workingDirectory: swiftToolsSupportCoreBuildURL)
9090
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftToolsSupportCoreBuildURL)
9191
Diagnostics.progress("Built swift-tools-support-core")
9292

9393
if hostOS != .macOS {
9494
Diagnostics.progress("Building swift-system")
95-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftSystemURL.path()], workingDirectory: swiftSystemBuildURL)
95+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftSystemURL.filePath], workingDirectory: swiftSystemBuildURL)
9696
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftSystemBuildURL)
9797
Diagnostics.progress("Built swift-system")
9898
}
9999

100100
Diagnostics.progress("Building llbuild")
101-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DLLBUILD_SUPPORT_BINDINGS:=Swift", llbuildURL.path()], workingDirectory: llbuildBuildURL)
101+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DLLBUILD_SUPPORT_BINDINGS:=Swift", llbuildURL.filePath], workingDirectory: llbuildBuildURL)
102102
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: llbuildBuildURL)
103103
Diagnostics.progress("Built llbuild")
104104

105105
Diagnostics.progress("Building swift-argument-parser")
106-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DBUILD_TESTING=NO", "-DBUILD_EXAMPLES=NO", swiftArgumentParserURL.path()], workingDirectory: swiftArgumentParserBuildURL)
106+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DBUILD_TESTING=NO", "-DBUILD_EXAMPLES=NO", swiftArgumentParserURL.filePath], workingDirectory: swiftArgumentParserBuildURL)
107107
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftArgumentParserBuildURL)
108108
Diagnostics.progress("Built swift-argument-parser")
109109

110110
Diagnostics.progress("Building swift-driver")
111-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftDriverURL.path()], workingDirectory: swiftDriverBuildURL)
111+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftDriverURL.filePath], workingDirectory: swiftDriverBuildURL)
112112
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftDriverBuildURL)
113113
Diagnostics.progress("Built swift-driver")
114114

115115
Diagnostics.progress("Building swift-build in \(swiftBuildBuildURL)")
116-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftBuildURL.path()], workingDirectory: swiftBuildBuildURL)
116+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftBuildURL.filePath], workingDirectory: swiftBuildBuildURL)
117117
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftBuildBuildURL)
118118
Diagnostics.progress("Built swift-build")
119119
}
@@ -135,9 +135,10 @@ struct CMakeSmokeTest: CommandPlugin {
135135
throw Errors.missingRepository(name)
136136
}
137137
let dependencyURL = dependency.directoryURL
138-
Diagnostics.progress("\(name): \(dependencyURL.path())")
139-
guard FileManager.default.fileExists(atPath: dependencyURL.path()) else {
140-
throw Errors.missingRepository(dependencyURL.path())
138+
let dependencyFilePath = try dependencyURL.filePath
139+
Diagnostics.progress("\(name): \(dependencyFilePath)")
140+
guard FileManager.default.fileExists(atPath: dependencyFilePath) else {
141+
throw Errors.missingRepository(dependencyFilePath)
141142
}
142143
return dependencyURL
143144
}
@@ -169,6 +170,19 @@ enum OS {
169170
}
170171
}
171172

173+
extension URL {
174+
var filePath: String {
175+
get throws {
176+
try withUnsafeFileSystemRepresentation { path in
177+
guard let path else {
178+
throw Errors.miscError("cannot get file path for URL: \(self)")
179+
}
180+
return String(cString: path)
181+
}
182+
}
183+
}
184+
}
185+
172186
extension Process {
173187
func run() async throws {
174188
try await withCheckedThrowingContinuation { continuation in
@@ -186,8 +200,8 @@ extension Process {
186200
}
187201

188202
static func checkNonZeroExit(url: URL, arguments: [String], workingDirectory: URL, environment: [String: String]? = nil) async throws {
189-
Diagnostics.progress("\(url.path()) \(arguments.joined(separator: " "))")
190-
#if USE_PROCESS_SPAWNING_WORKAROUND
203+
try Diagnostics.progress("\(url.filePath) \(arguments.joined(separator: " "))")
204+
#if USE_PROCESS_SPAWNING_WORKAROUND && !os(Windows)
191205
Diagnostics.progress("Using process spawning workaround")
192206
// Linux workaround for https://github.com/swiftlang/swift-corelibs-foundation/issues/4772
193207
// Foundation.Process on Linux seems to inherit the Process.run()-calling thread's signal mask, creating processes that even have SIGTERM blocked
@@ -197,7 +211,7 @@ extension Process {
197211
var attrs: posix_spawnattr_t = posix_spawnattr_t()
198212
defer { posix_spawnattr_destroy(&attrs) }
199213
posix_spawn_file_actions_init(&fileActions)
200-
posix_spawn_file_actions_addchdir_np(&fileActions, workingDirectory.path())
214+
try posix_spawn_file_actions_addchdir_np(&fileActions, workingDirectory.filePath)
201215

202216
posix_spawnattr_init(&attrs)
203217
posix_spawnattr_setpgroup(&attrs, 0)
@@ -216,9 +230,9 @@ extension Process {
216230
posix_spawnattr_setsigdefault(&attrs, &mostSignals)
217231
posix_spawnattr_setflags(&attrs, numericCast(POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK))
218232
var pid: pid_t = -1
219-
try withArrayOfCStrings([url.path()] + arguments) { arguments in
233+
try withArrayOfCStrings([url.filePath] + arguments) { arguments in
220234
try withArrayOfCStrings((environment ?? [:]).map { key, value in "\(key)=\(value)" }) { environment in
221-
let spawnResult = posix_spawn(&pid, url.path(), /*file_actions=*/&fileActions, /*attrp=*/&attrs, arguments, nil);
235+
let spawnResult = try posix_spawn(&pid, url.filePath, /*file_actions=*/&fileActions, /*attrp=*/&attrs, arguments, nil);
222236
var exitCode: Int32 = -1
223237
var result = wait4(pid, &exitCode, 0, nil);
224238
while (result == -1 && errno == EINTR) {
@@ -246,6 +260,7 @@ extension Process {
246260
}
247261
}
248262

263+
#if USE_PROCESS_SPAWNING_WORKAROUND && !os(Windows)
249264
func scan<S: Sequence, U>(_ seq: S, _ initial: U, _ combine: (U, S.Element) -> U) -> [U] {
250265
var result: [U] = []
251266
result.reserveCapacity(seq.underestimatedCount)
@@ -283,3 +298,4 @@ func withArrayOfCStrings<T>(
283298
}
284299
}
285300
}
301+
#endif

0 commit comments

Comments
 (0)