Skip to content

"terminate called after throwing an instance of 'std::out_of_range'" crash when compiling with Static Linux SDK #86149

@mitchellallison

Description

@mitchellallison

Description

When compiling with the Static Linux SDK, attempting to import statfs (which exists as both a function, and a struct definition in C), the compiler crashes with terminate called after throwing an instance of 'std::out_of_range.

Reproduction

Package.swift:

/ swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "statfs_compiler_crash",
    targets: [
        .target(
            name: "Linux"
        ),
        .executableTarget(
            name: "statfs_compiler_crash",
            dependencies: ["Linux"]
        )
    ]
)

Sources/Linux/include/Linux.h

#include <sys/vfs.h>

Sources/statfs_compiler_crash/main.swift

#if canImport(Musl)
@preconcurrency import Musl
#else
import Linux
#endif

var fs = statfs()
guard statfs("/sys/fs/cgroup", &fs) == 0 else { fatalError("Failed to call statfs") }
print(fs.f_type)

Sources/statfs_compiler_crash/SystemCalls.swift

#if canImport(Musl)
@preconcurrency import Musl
#else
import Linux
#endif

private let sysStatfs: @convention(c) (UnsafePointer<CChar>, UnsafeMutablePointer<statfs>) -> CInt = statfs

internal func statfs(
    _ path: UnsafePointer<CChar>,
    _ buf: inout statfs
) -> Int32 {
    sysStatfs(path, &buf)
}

Stack dump

$ swift build --swift-sdks-path /tmp/swiftsdks --swift-sdk x86_64-swift-linux-musl                                20:47:02 [20/1041]
Building for debugging...                                                                                                                                                                                                                        
error: emit-module command failed due to signal 6 (use -v to see invocation)                                                                                                                                                                     
error: compile command failed due to signal 6 (use -v to see invocation)                                                                                                                                                                         
terminate called after throwing an instance of 'std::out_of_range'                                                                                                                                                                               
  what():  map::at                                                                                                                                                                                                                               
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.                                                                                                                                     
Stack dump:                                                                                                                                                                                                                                      
0.      Program arguments: /usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /mnt/statfs_compiler_crash/System
Calls.swift /mnt/statfs_compiler_crash/Sources/statfs_compiler_crash/main.swift -target x86_64-swift-linux-musl -disable-objc-interop -sdk /tmp/swiftsdks/swift-6.2.3-RELEASE_static-linux-0.0.1.artifac
tbundle/swift-6.2.3-RELEASE_static-linux-0.0.1/swift-linux-musl/musl-1.2.5.sdk/x86_64 -I /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/Modules -color-diagnostics -Xcc -fcolor-diagnos
tics -enable-testing -g -debug-info-format=dwarf -dwarf-version=4 -module-cache-path /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/ModuleCache -swift-version 6 -Onone -D SWIFT_PACKAG
E -D DEBUG -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -entry-point-function-name statfs_compiler_crash_main -empty-abi-descriptor -resource-dir /tmp/swiftsdks/swift-6.2.3-RELEASE_static-linux-0.0.1.artifactbundle/swift-6.2.3-RELEASE_static-
linux-0.0.1/swift-linux-musl/musl-1.2.5.sdk/x86_64/usr/lib/swift_static -use-static-resource-dir -enable-anonymous-context-mangled-names -file-compilation-dir /mnt/statfs_compiler_crash -Xcc -fmodule-
map-file=/mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/Linux.build/module.modulemap -Xcc -I -Xcc /mnt/statfs_compiler_crash/Sources/Linux/inc
lude -Xcc --sysroot -Xcc /tmp/swiftsdks/swift-6.2.3-RELEASE_static-linux-0.0.1.artifactbundle/swift-6.2.3-RELEASE_static-linux-0.0.1/swift-linux-musl/musl-1.2.5.sdk/x86_64 -Xcc -g -Xcc -fno-omit-frame-pointer -no-auto-bridging-header-chainin
g -module-name statfs_compiler_crash -package-name statfs_compiler_crash -in-process-plugin-server-path /usr/lib/swift/host/libSwiftInProcPluginServer.so -plugin-path /usr/lib/swift/host/plugins -plugin-path /usr/local/lib/swift/host/plugins
 -emit-module-doc-path /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/Modules/statfs_compiler_crash.swiftdoc -emit-module-source-info-path /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/Modules/statfs_compiler_crash.swiftsourceinfo -serialize-diagnostics-path /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/s
tatfs_compiler_crash.build/statfs_compiler_crash.emit-module.dia -emit-dependencies-path /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/statfs_compiler_crash.build/statfs_compiler_cra
sh.emit-module.d -o /mnt/statfs_compiler_crash/.build/x86_64-swift-linux-musl/debug/Modules/statfs_compiler_crash.swiftmodule                                                                           
1.      Swift version 6.2.3 (swift-6.2.3-RELEASE)                                                                                                                                                                                                
2.      Compiling with the current language version                                                                                                                                                                                              
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for statfs_compiler_crash)                                                                        
4.      While running pass #24 SILFunctionTransform "SendNonSendable" on SILFunction "@$s21statfs_compiler_crash9sysStatfs33_8B65A2241754573B10DD7108DECF577ALL_WZ".                                                                             
 for declaration 0x555560329968 (at /mnt/statfs_compiler_crash/Sources/statfs_compiler_crash/SystemCalls.swift:7:9)                                                                                     
 #0 0x000055555c849438 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/bin/swift-frontend+0x72f5438)                                                                                                                                   
 #1 0x000055555c84721e llvm::sys::RunSignalHandlers() (/usr/bin/swift-frontend+0x72f321e)                                                                                                                                                        
 #2 0x000055555c849ad1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0                                                                                                                                                                     
 #3 0x00007ffffda13520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)                                                                                                                                                                                 
 #4 0x00007ffffda679fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)                                                                                                                                                                    
 #5 0x00007ffffda13476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)                                                                                                                                                                         
 #6 0x00007ffffd9f97f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)                                                                                                                                                                           
 #7 0x00007ffffdcbcb9e (/lib/x86_64-linux-gnu/libstdc++.so.6+0xa2b9e)                                                                                                                                                                            
 #8 0x00007ffffdcc820c (/lib/x86_64-linux-gnu/libstdc++.so.6+0xae20c)                                                                                                                                                                             #9 0x00007ffffdcc8277 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xae277)                                                                                                                                                                            
#10 0x00007ffffdcc84d8 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xae4d8)                                                                                                                                                                            #11 0x00007ffffdcbf4a0 std::__throw_out_of_range(char const*) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xa54a0)                                                                                                                                     #12 0x0000555556e007be (/usr/bin/swift-frontend+0x18ac7be)                                                                                                                                                                                       
#13 0x0000555556bd9b6b swift::regionanalysisimpl::BlockPartitionState::recomputeExitFromEntry(swift::regionanalysisimpl::PartitionOpTranslator&) (/usr/bin/swift-frontend+0x1685b6b)                                                             
#14 0x0000555556bdce4d swift::RegionAnalysisFunctionInfo::runDataflow() (/usr/bin/swift-frontend+0x1688e4d)                                                                                                                                      
#15 0x0000555556bdb38f swift::RegionAnalysisFunctionInfo::RegionAnalysisFunctionInfo(swift::SILFunction*, swift::PostOrderFunctionInfo*) (/usr/bin/swift-frontend+0x168738f)                                                                     
#16 0x0000555556bdda78 swift::RegionAnalysis::newFunctionAnalysis(swift::SILFunction*) crtstuff.c:0:0                                                                                                                                            #17 0x0000555556db601c swift::FunctionAnalysisBase<swift::RegionAnalysisFunctionInfo>::get(swift::SILFunction*) crtstuff.c:0:0                                                                                                                   
#18 0x0000555556db5d0b (anonymous namespace)::SendNonSendable::run() SendNonSendable.cpp:0:0
#19 0x0000555556941192 swift::SILPassManager::runPassOnFunction(unsigned int, swift::SILFunction*) (/usr/bin/swift-frontend+0x13ed192)
#20 0x00005555569421ee swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) (/usr/bin/swift-frontend+0x13ee1ee)
#21 0x0000555556943dfb swift::SILPassManager::execute() (/usr/bin/swift-frontend+0x13efdfb)
#22 0x000055555693f2d8 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) (/usr/bin/swift-frontend+0x13eb2d8)
#23 0x000055555693f28d swift::ExecuteSILPipelineRequest::evaluate(swift::Evaluator&, swift::SILPipelineExecutionDescriptor) const (/usr/bin/swift-frontend+0x13eb28d)
#24 0x000055555696b24a swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) crtstuff
.c:0:0
#25 0x0000555556948d1d swift::ExecuteSILPipelineRequest::OutputType swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(s
wift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()>(swift::ExecuteSILPipelineRequest const&, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::Execute
SILPipelineRequest)::'lambda'()) crtstuff.c:0:0
#26 0x000055555693f3ef swift::executePassPipelinePlan(swift::SILModule*, swift::SILPassPipelinePlan const&, bool, swift::irgen::IRGenModule*) (/usr/bin/swift-frontend+0x13eb3ef)
#27 0x00005555569499d1 swift::runSILDiagnosticPasses(swift::SILModule&) (/usr/bin/swift-frontend+0x13f59d1)
#28 0x0000555556391d78 swift::CompilerInstance::performSILProcessing(swift::SILModule*) (/usr/bin/swift-frontend+0xe3dd78)
#29 0x00005555560d7b5f performCompileStepsPostSILGen(swift::CompilerInstance&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths 
const&, int&, swift::FrontendObserver*) FrontendTool.cpp:0:0 
#30 0x00005555560d6c8a swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) (/usr/bin/swift-frontend+0xb82c8a)
#31 0x00005555560d93ea performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) FrontendTool.cpp:0:0
#32 0x00005555560d88ca swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/usr/bin/swift-frontend+0xb848ca)
#33 0x0000555555e7850a swift::mainEntry(int, char const**) (/usr/bin/swift-frontend+0x92450a)
#34 0x00007ffffd9fad90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#35 0x00007ffffd9fae40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#36 0x0000555555e77965 _start (/usr/bin/swift-frontend+0x923965)

Expected behavior

Compiler compiles code as expected (as happens when running swift build not using the Static Linux SDK).

Environment

$ swift --version
Swift version 6.2.3 (swift-6.2.3-RELEASE)
Target: x86_64-unknown-linux-gnu

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions