Skip to content

InlineArray: empty array literals aren't supported #79847

Closed
@benrimmington

Description

@benrimmington

Description

While adding unit tests for #79800, I discovered that empty array literals aren't supported.

Cc: @swiftlang/standard-librarians

Reproduction

@available(SwiftStdlib 6.2, *)
func test() {
  let _: InlineArray<0, Int> = []
}
SIL memory lifetime failure in @$s4main4testyyF: memory is not initialized, but should be
memory location:   %0 = alloc_stack $InlineArray<0, Int>           // users: %2, %1
at instruction:   %1 = load [trivial] %0 : $*InlineArray<0, Int>

in function:
// test()
// Isolation: unspecified
sil hidden [available 9999] [ossa] @$s4main4testyyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_stack $InlineArray<0, Int>           // users: %2, %1
  %1 = load [trivial] %0
  dealloc_stack %0                                // id: %2
  %3 = tuple ()                                   // user: %4
  return %3                                       // id: %4
} // end sil function '$s4main4testyyF'

Stack dump

Stack dump:
0.	Program arguments: /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend -frontend -c -primary-file /Users/benrimmington/Public/swiftlang/swift/test/stdlib/InlineArray.swift -target arm64-apple-macosx13.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -F /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -F /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/lib -enable-experimental-feature ValueGenerics -module-cache-path /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/swift-test-results/arm64-apple-macosx13.0/clang-module-cache -swift-version 4 -define-availability "SwiftStdlib 9999:macOS 9999, iOS 9999, watchOS 9999, tvOS 9999" -define-availability "SwiftStdlib 5.0:macOS 10.14.4, iOS 12.2, watchOS 5.2, tvOS 12.2" -define-availability "SwiftStdlib 5.1:macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0" -define-availability "SwiftStdlib 5.2:macOS 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4" -define-availability "SwiftStdlib 5.3:macOS 11.0, iOS 14.0, watchOS 7.0, tvOS 14.0" -define-availability "SwiftStdlib 5.4:macOS 11.3, iOS 14.5, watchOS 7.4, tvOS 14.5" -define-availability "SwiftStdlib 5.5:macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0" -define-availability "SwiftStdlib 5.6:macOS 12.3, iOS 15.4, watchOS 8.5, tvOS 15.4" -define-availability "SwiftStdlib 5.7:macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0" -define-availability "SwiftStdlib 5.8:macOS 13.3, iOS 16.4, watchOS 9.4, tvOS 16.4" -define-availability "SwiftStdlib 5.9:macOS 14.0, iOS 17.0, watchOS 10.0, tvOS 17.0" -define-availability "SwiftStdlib 5.10:macOS 14.4, iOS 17.4, watchOS 10.4, tvOS 17.4, visionOS 1.1" -define-availability "SwiftStdlib 6.0:macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0" -define-availability "SwiftStdlib 6.1:macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, visionOS 9999" -define-availability "SwiftStdlib 6.2:macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, visionOS 9999" -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -in-process-plugin-server-path /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/lib/swift/host/libSwiftInProcPluginServer.dylib -plugin-path /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/lib/swift/host/plugins -plugin-path /Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/local/lib/swift/host/plugins -target-sdk-version 15.2 -dwarf-version=4 -parse-as-library -module-name main -o /var/folders/y8/wkf58cq14pj0v_f4r3dkz8yw0000gn/T/lit-tmp-cl5s8442/InlineArray-e78248.o
1.	Swift version 6.2-dev (LLVM 831778a1a61b625, Swift ed5b3ca2528cd36)
2.	Compiling with effective version 4.1.50
3.	While verifying SIL function "@$s4main4testyyF".
 for 'test()' (at /Users/benrimmington/Public/swiftlang/swift/test/stdlib/InlineArray.swift:25:1)
 #0 0x000000010aa3c034 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x105c70034)
 #1 0x000000010aa3a5f0 llvm::sys::RunSignalHandlers() (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x105c6e5f0)
 #2 0x000000010aa3c67c SignalHandler(int, __siginfo*, void*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x105c7067c)
 #3 0x000000019bbbede4 (/usr/lib/system/libsystem_platform.dylib+0x180482de4)
 #4 0x000000019bb87f70 (/usr/lib/system/libsystem_pthread.dylib+0x18044bf70)
 #5 0x000000019ba94908 (/usr/lib/system/libsystem_c.dylib+0x180358908)
 #6 0x000000010aaa19c8 swift::SILValueOwnershipChecker::gatherUsers(llvm::SmallVectorImpl<swift::Operand*>&, llvm::SmallVectorImpl<swift::Operand*>&, llvm::SmallVectorImpl<swift::Operand*>&) (.cold.9) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x105cd59c8)
 #7 0x0000000105f583a4 (anonymous namespace)::MemoryLifetimeVerifier::requireBitsSetForArgument(llvm::SmallBitVector const&, swift::Operand*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10118c3a4)
 #8 0x0000000105f57b8c (anonymous namespace)::MemoryLifetimeVerifier::require(llvm::SmallBitVector const&, llvm::Twine const&, swift::SILInstruction*, bool) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10118bb8c)
 #9 0x0000000105f57d68 (anonymous namespace)::MemoryLifetimeVerifier::requireBitsSet(llvm::SmallBitVector const&, swift::SILValue, swift::SILInstruction*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10118bd68)
#10 0x0000000105f5699c (anonymous namespace)::MemoryLifetimeVerifier::checkBlock(swift::SILBasicBlock*, llvm::SmallBitVector&) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10118a99c)
#11 0x0000000105f5889c std::__1::__function::__func<(anonymous namespace)::MemoryLifetimeVerifier::verify()::$_0, std::__1::allocator<(anonymous namespace)::MemoryLifetimeVerifier::verify()::$_0>, void (swift::SILBasicBlock*)>::operator()(swift::SILBasicBlock*&&) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10118c89c)
#12 0x0000000105f23f94 swift::MemoryLocations::handleSingleBlockLocations(std::__1::function<void (swift::SILBasicBlock*)>) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x101157f94)
#13 0x0000000105f55ccc (anonymous namespace)::MemoryLifetimeVerifier::verify() (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x101189ccc)
#14 0x0000000105f547e4 swift::SILFunction::verifyMemoryLifetime(swift::CalleeCache*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x1011887e4)
#15 0x0000000105f634ec (anonymous namespace)::SILVerifier::visitSILFunction(swift::SILFunction*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x1011974ec)
#16 0x0000000105f5d624 swift::SILFunction::verify(swift::CalleeCache*, bool, bool, bool) const (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x101191624)
#17 0x0000000105f60290 swift::SILModule::verify(swift::CalleeCache*, bool, bool) const (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x101194290)
#18 0x0000000105f60190 swift::SILModule::verify(bool, bool) const (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x101194190)
#19 0x00000001052e2144 swift::CompilerInstance::performSILProcessing(swift::SILModule*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x100516144)
#20 0x000000010503fc28 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x100273c28)
#21 0x000000010503f2d0 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x1002732d0)
#22 0x000000010504b59c withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10027f59c)
#23 0x0000000105040f74 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x100274f74)
#24 0x00000001050407d0 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x1002747d0)
#25 0x0000000104e0260c swift::mainEntry(int, char const**) (/Users/benrimmington/Public/swiftlang/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/swift-frontend+0x10003660c)
#26 0x000000019b808274 
<unknown>:0: error: unable to execute command: Abort trap: 6
<unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation)

Expected behavior

The public InlineArray.init(_:) can be used to create an empty instance.

Environment

Swift version 6.2-dev (LLVM 831778a1a61b625, Swift ed5b3ca)

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    SILGenArea → compiler: The SIL generation stagebugA deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of software

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions