Skip to content

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

@weissi

Description

@weissi

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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions