Skip to content

[6.2] [InlineArray] Compiler crash when compiling in release mode #82813

Open
@MahdiBM

Description

@MahdiBM

Description

No response

Reproduction

docker run --rm -it swiftlang/swift:nightly-6.2-noble@sha256:88e56928eccb5aa390f8bded66ee2ab0e30040318b347970958b21a82940cbb1 bash -c '
    git clone https://github.com/MahdiBM/swift-dns
    cd swift-dns
    git checkout swift-bug-inline-array-3
    swift build --build-tests -Xswiftc -enable-testing -c release
'

Stack dump

[26/31] Compiling DNSModels +Optional.swift
error: compile command failed due to signal 6 (use -v to see invocation)
SIL verification failed: load [copy] or load [take] can only be applied to non-trivial types: !LI->getType().isTrivial(*LI->getFunction())
Verifying instruction:
     %6 = alloc_stack $UninitializedInlineArray<1, Int> // users: %10, %8, %7
->   %8 = load [take] %6 : $*UninitializedInlineArray<1, Int> // user: %9
     %9 = enum $TinyArray<1, Int>.Base, #TinyArray.Base.inline!enumelt, %8 : $UninitializedInlineArray<1, Int> // user: %11
In function:
// TinyArrayTests.whenEmpty()
// Isolation: unspecified
sil [ossa] @$s8DNSTests14TinyArrayTestsV9whenEmptyyyF : $@convention(method) (TinyArrayTests) -> () {
[global: read,write,copy,destroy,allocate,deinit_barrier]
// %0 "self"                                      // user: %1
bb0(%0 : $TinyArrayTests):
  debug_value %0, let, name "self", argno 1       // id: %1
  increment_profiler_counter 0, "$s8DNSTests14TinyArrayTestsV9whenEmptyyyF", num_counters 2, hash 0 // id: %2
  increment_profiler_counter 0, "$s9DNSModels9TinyArrayVACyxq_GycfC", num_counters 1, hash 0 // id: %3
  %4 = metatype $@thin UninitializedInlineArray<1, Int>.Type // user: %7
  // function_ref UninitializedInlineArray.init()
  %5 = function_ref @$s9DNSModels24UninitializedInlineArrayVACyxq_GycfC : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@thin UninitializedInlineArray<τ_0_0, τ_0_1>.Type) -> @out UninitializedInlineArray<τ_0_0, τ_0_1> // user: %7
  %6 = alloc_stack $UninitializedInlineArray<1, Int> // users: %10, %8, %7
  %7 = apply %5<1, Int>(%6, %4) : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@thin UninitializedInlineArray<τ_0_0, τ_0_1>.Type) -> @out UninitializedInlineArray<τ_0_0, τ_0_1>
  %8 = load [take] %6                             // user: %9
  %9 = enum $TinyArray<1, Int>.Base, #TinyArray.Base.inline!enumelt, %8 // user: %11
  dealloc_stack %6                                // id: %10
  %11 = struct $TinyArray<1, Int> (%9)            // users: %18, %12
  debug_value %11, let, name "array"              // id: %12
  %13 = alloc_stack [var_decl] $TinyArray<1, Int>.Iterator, var, name "$num$generator", type $TinyArray<1, Int>.Iterator // users: %102, %24, %28, %103
  %14 = alloc_stack $TinyArray<1, Int>.Iterator   // users: %23, %22, %20
  increment_profiler_counter 0, "$s9DNSModels9TinyArrayV12makeIteratorAC0E0Vyxq__GyF", num_counters 1, hash 0 // id: %15
  %16 = metatype $@thin TinyArray<1, Int>.Iterator.Type // user: %20
  %17 = alloc_stack $TinyArray<1, Int>            // users: %21, %20, %18
  store %11 to [init] %17                         // id: %18
  // function_ref TinyArray.Iterator.init(base:)
  %19 = function_ref @$s9DNSModels9TinyArrayV8IteratorV4baseAEyxq__GACyxq_G_tcfC : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@in TinyArray<τ_0_0, τ_0_1>, @thin TinyArray<τ_0_0, τ_0_1>.Iterator.Type) -> @out TinyArray<τ_0_0, τ_0_1>.Iterator // user: %20
  %20 = apply %19<1, Int>(%14, %17, %16) : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@in TinyArray<τ_0_0, τ_0_1>, @thin TinyArray<τ_0_0, τ_0_1>.Iterator.Type) -> @out TinyArray<τ_0_0, τ_0_1>.Iterator
  dealloc_stack %17                               // id: %21
  %22 = load [take] %14                           // user: %24
  dealloc_stack %14                               // id: %23
  store %22 to [init] %13                         // id: %24
  // function_ref TinyArray.Iterator.next()
  %25 = function_ref @$s9DNSModels9TinyArrayV8IteratorV4nextq_SgyF : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@inout TinyArray<τ_0_0, τ_0_1>.Iterator) -> @out Optional<τ_0_1> // user: %28
  br bb1                                          // id: %26

bb1:                                              // Preds: bb2 bb0
  %27 = alloc_stack $Optional<Int>                // users: %30, %29, %28
  %28 = apply %25<1, Int>(%27, %13) : $@convention(method) <let τ_0_0 : Int, τ_0_1> (@inout TinyArray<τ_0_0, τ_0_1>.Iterator) -> @out Optional<τ_0_1>
  %29 = load [trivial] %27                        // users: %60, %31
  dealloc_stack %27                               // id: %30
  switch_enum %29, case #Optional.some!enumelt: bb2, case #Optional.none!enumelt: bb3 // id: %31

bb2(%32 : $Int):                                  // Preds: bb1
  increment_profiler_counter 1, "$s8DNSTests14TinyArrayTestsV9whenEmptyyyF", num_counters 2, hash 0 // id: %33
  %34 = alloc_stack $Issue                        // users: %96, %100, %93
  %35 = metatype $@thin Issue.Type                // user: %93
  %36 = alloc_stack $Optional<Comment>            // users: %95, %99, %93, %75, %37
  %37 = init_enum_data_addr %36, #Optional.some!enumelt // user: %74
  %38 = alloc_stack [lexical] [var_decl] $Comment.StringInterpolation // users: %53, %64, %69, %74, %98, %45
  %39 = integer_literal $Builtin.Int64, 37        // user: %40
  %40 = struct $Int (%39)                         // user: %45
  %41 = integer_literal $Builtin.Int64, 1         // user: %42
  %42 = struct $Int (%41)                         // user: %45
  %43 = metatype $@thin Comment.StringInterpolation.Type // user: %45
  // function_ref Comment.StringInterpolation.init(literalCapacity:interpolationCount:)
  %44 = function_ref @$s7Testing7CommentV19StringInterpolationV15literalCapacity18interpolationCountAESi_SitcfC : $@convention(method) (Int, Int, @thin Comment.StringInterpolation.Type) -> @out Comment.StringInterpolation // user: %45
  %45 = apply %44(%38, %40, %42, %43) : $@convention(method) (Int, Int, @thin Comment.StringInterpolation.Type) -> @out Comment.StringInterpolation
  %46 = string_literal utf8 "Expected the array to be empty. Num: " // user: %51
  %47 = integer_literal $Builtin.Word, 37         // user: %51
  destroy_addr %76                                // id: %94
  destroy_addr %36                                // id: %95
  destroy_addr %34                                // id: %96
  dealloc_stack %76                               // id: %97
  dealloc_stack %38                               // id: %98
  dealloc_stack %36                               // id: %99
  dealloc_stack %34                               // id: %100
  br bb1                                          // id: %101

bb3:                                              // Preds: bb1
  destroy_addr %13                                // id: %102
  dealloc_stack %13                               // id: %103
  %104 = tuple ()                                 // user: %105
  return %104                                     // id: %105
} // end sil function '$s8DNSTests14TinyArrayTestsV9whenEmptyyyF'

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 -c /__w/swift-dns/swift-dns/Tests/DNSTests/DNSTests.swift /__w/swift-dns/swift-dns/Tests/DNSTests/HeaderTests.swift /__w/swift-dns/swift-dns/Tests/DNSTests/NameTests.swift /__w/swift-dns/swift-dns/Tests/DNSTests/Resources.swift /__w/swift-dns/swift-dns/Tests/DNSTests/TinyArrayTests.swift -supplementary-output-file-map /tmp/TemporaryDirectory.RGDHQ9/supplementaryOutputs-1 -target x86_64-unknown-linux-gnu -disable-objc-interop -I /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/Modules -no-color-diagnostics -Xcc -fno-color-diagnostics -enable-testing -g -debug-info-format=dwarf -dwarf-version=4 -module-cache-path /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/ModuleCache -profile-generate -profile-coverage-mapping -swift-version 6 -O -D SWIFT_PACKAGE -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -enable-cross-import-overlays -enable-upcoming-feature MemberImportVisibility -enable-upcoming-feature InternalImportsByDefault -enable-upcoming-feature ExistentialAny -empty-abi-descriptor -file-compilation-dir /__w/swift-dns/swift-dns -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/checkouts/swift-atomics/Sources/_AtomicsShims/include/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-atomics/Sources/_AtomicsShims/include -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/CNIOWASI.build/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIOWASI/include -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIOWindows/include/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIOWindows/include -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/CNIOLinux.build/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIOLinux/include -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/CNIODarwin.build/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIODarwin/include -Xcc -fmodule-map-file=/__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/CNIOAtomics.build/module.modulemap -Xcc -I -Xcc /__w/swift-dns/swift-dns/.build/checkouts/swift-nio/Sources/CNIOAtomics/include -Xcc -fPIC -Xcc -g -Xcc -fno-omit-frame-pointer -no-auto-bridging-header-chaining -module-name DNSTests -package-name swift_dns -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 -enable-default-cmo -parse-as-library -num-threads 4 -o /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/DNSTests.build/DNSTests.swift.o -o /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/DNSTests.build/HeaderTests.swift.o -o /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/DNSTests.build/NameTests.swift.o -o /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/DNSTests.build/Resources.swift.o -o /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/DNSTests.build/TinyArrayTests.swift.o -index-store-path /__w/swift-dns/swift-dns/.build/x86_64-unknown-linux-gnu/release/index/store -index-system-modules
1.	Swift version 6.2-dev (LLVM 739191e93776a37, Swift ee5f4df5ee0a9f9)
2.	Compiling with the current language version
3.	While evaluating request ExecuteSILPipelineRequest(Run pipelines { PrepareOptimizationPasses, EarlyModulePasses, HighLevel,Function+EarlyLoopOpt, HighLevel,Module+StackPromote, MidLevel,Function, ClosureSpecialize, LowLevel,Function, LateLoopOpt, SIL Debug Info Generator } on SIL for DNSTests)
4.	While running pass #207060 SILFunctionTransform "OwnershipModelEliminator" on SILFunction "@$s8DNSTests14TinyArrayTestsV9whenEmptyyyF".
 for 'whenEmpty()' (at /__w/swift-dns/swift-dns/Tests/DNSTests/TinyArrayTests.swift:6:11)
5.	Found verification error when verifying before lowering ownership. Please re-run with -sil-verify-all to identify the actual pass that introduced the verification error.
6.	While verifying SIL function "@$s8DNSTests14TinyArrayTestsV9whenEmptyyyF".
 for 'whenEmpty()' (at /__w/swift-dns/swift-dns/Tests/DNSTests/TinyArrayTests.swift:6:11)
 #0 0x000055d533622af8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/bin/swift-frontend+0x8c20af8)
 #1 0x000055d53362069e llvm::sys::RunSignalHandlers() (/usr/bin/swift-frontend+0x8c1e69e)
 #2 0x000055d533623191 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f550f7e0330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x00007f550f839b2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
 #5 0x00007f550f7e027e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
 #6 0x00007f550f7c38ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
 #7 0x000055d52cd52ef9 (/usr/bin/swift-frontend+0x2350ef9)
 #8 0x000055d52cd7ddc1 swift::SILVisitorBase<(anonymous namespace)::SILVerifier, void>::visitSILBasicBlock(swift::SILBasicBlock*) SILVerifier.cpp:0:0
 #9 0x000055d52cd5d8af (anonymous namespace)::SILVerifier::visitSILBasicBlock(swift::SILBasicBlock*) SILVerifier.cpp:0:0
#10 0x000055d52cd5bccb (anonymous namespace)::SILVerifier::visitSILFunction(swift::SILFunction*) SILVerifier.cpp:0:0
#11 0x000055d52cd539fe swift::SILFunction::verify(swift::CalleeCache*, bool, bool, bool) const (/usr/bin/swift-frontend+0x23519fe)
#12 0x000055d52c8d95c0 (anonymous namespace)::OwnershipModelEliminator::run() OwnershipModelEliminator.cpp:0:0
#13 0x000055d52c32f8d0 swift::SILPassManager::runPassOnFunction(unsigned int, swift::SILFunction*) (/usr/bin/swift-frontend+0x192d8d0)
#14 0x000055d52c330ae1 swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) (/usr/bin/swift-frontend+0x192eae1)
#15 0x000055d52c32d538 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) (/usr/bin/swift-frontend+0x192b538)
#16 0x000055d52c32d4ed swift::ExecuteSILPipelineRequest::evaluate(swift::Evaluator&, swift::SILPipelineExecutionDescriptor) const (/usr/bin/swift-frontend+0x192b4ed)
#17 0x000055d52c3501da swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) crtstuff.c:0:0
#18 0x000055d52c33b796 swift::ExecuteSILPipelineRequest::OutputType swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()>(swift::ExecuteSILPipelineRequest const&, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()) crtstuff.c:0:0
#19 0x000055d52c32d72f swift::executePassPipelinePlan(swift::SILModule*, swift::SILPassPipelinePlan const&, bool, swift::irgen::IRGenModule*) (/usr/bin/swift-frontend+0x192b72f)
#20 0x000055d52c33d1eb swift::runSILOptimizationPasses(swift::SILModule&) (/usr/bin/swift-frontend+0x193b1eb)
#21 0x000055d52bcaae3e swift::CompilerInstance::performSILProcessing(swift::SILModule*) (/usr/bin/swift-frontend+0x12a8e3e)
#22 0x000055d52b942597 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
#23 0x000055d52b941902 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) (/usr/bin/swift-frontend+0xf3f902)
#24 0x000055d52b9531ea withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) FrontendTool.cpp:0:0
#25 0x000055d52b9443be performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) FrontendTool.cpp:0:0
#26 0x000055d52b943503 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/usr/bin/swift-frontend+0xf41503)
#27 0x000055d52b6ce36a swift::mainEntry(int, char const**) (/usr/bin/swift-frontend+0xccc36a)
#28 0x00007f550f7c51ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#29 0x00007f550f7c528b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#30 0x000055d52b6cd365 _start (/usr/bin/swift-frontend+0xccb365)

Expected behavior

No compiler crash.

Environment

Nightly docker image: swiftlang/swift:nightly-6.2-noble@sha256: 88e56928eccb5aa390f8bded66ee2ab0e30040318b347970958b21a82940cbb1

Works fine on Xcode 26 beta 2.

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