Skip to content

Default swift-format breaks my program (stops compiling) because it reorders imports that are order sensitive #933

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
weissi opened this issue Feb 15, 2025 · 2 comments

Comments

@weissi
Copy link

weissi commented Feb 15, 2025

Consider this program

@preconcurrency import Glibc
import Foundation

await Task {
  _ = fputs("hello\n", stderr)
}.value

compiles and runs just fine:

root@95a2c6e555af:/tmp/x# swiftc -swift-version 6 test.swift && echo OK
OK

But running swift-format (default config) on it, breaks it:

$ swift format --in-place test.swift && swiftc -swift-version 6 test.swift && echo OK
test.swift:5:24: error: reference to var 'stderr' is not concurrency-safe because it involves shared mutable state
3 | 
4 | await Task {
5 |   _ = fputs("hello\n", stderr)
  |                        `- error: reference to var 'stderr' is not concurrency-safe because it involves shared mutable state
6 | }.value
7 | 

SwiftGlibc.stderr:1:12: note: var declared here
1 | public var stderr: UnsafeMutablePointer<FILE>!
  |            `- note: var declared here

This is because it changed the order of the imports from the correct

@preconcurrency import Glibc
import Foundation

to the incorrect

import Foundation
@preconcurrency import Glibc

This is swift-format from

Swift version 6.0.2 (swift-6.0.2-RELEASE)
Target: aarch64-unknown-linux-gnu

Related issues:

@ahoppen
Copy link
Member

ahoppen commented Feb 15, 2025

Synced to Apple’s issue tracker as rdar://144915822

@allevato
Copy link
Member

This is a duplicate of #826.

The compiler should really be fixed here; unfortunately the original bug filed there (swiftlang/swift#76842) hasn't seen any movement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants