-
Notifications
You must be signed in to change notification settings - Fork 10.7k
"terminate called after throwing an instance of 'std::out_of_range'" crash when compiling with Static Linux SDK #86149
Copy link
Copy link
Open
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwareBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labelsThis issue needs more specific labels
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwareBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labelsThis issue needs more specific labels