Skip to content

Initialization of a generic structure with a pack parameter using tuple causes compiler crash. #68160

@jamesmmadeira

Description

@jamesmmadeira

Description
If I have a generic structure with a pack parameter and I initialize a new instance of it using a tuple created from another pack parameter, then the compiler crashes.

Crash backtrace when building in Xcode
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file "/Users/jamesmadeira/Library/Mobile Documents/com~apple~CloudDocs/Developer/CrashTest/CrashTest/main.swift" -emit-dependencies-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.d -emit-const-values-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.swiftconstvalues -emit-reference-dependencies-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.swiftdeps -serialize-diagnostics-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.dia -target arm64-apple-macos14.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -I /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Products/Debug -F /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Products/Debug -no-color-diagnostics -enable-testing -g -module-cache-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 5 -enforce-exclusivity=checked -Onone -D DEBUG -serialize-debugging-options -const-gather-protocols-file /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/CrashTest_const_extract_protocols.json -enable-bare-slash-regex -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc "/Users/jamesmadeira/Library/Mobile Documents/com~apple~CloudDocs/Developer/CrashTest" -resource-dir /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -Xcc -ivfsstatcache -Xcc /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/SDKStatCaches.noindex/macosx14.0-23A5326c-f7e79a2b09dbe2c8a4ba251adb57f722.sdkstatcache -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/CrashTest-generated-files.hmap -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/CrashTest-own-target-headers.hmap -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/CrashTest-all-target-headers.hmap -Xcc -iquote -Xcc /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/CrashTest-project-headers.hmap -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Products/Debug/include -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/DerivedSources-normal/arm64 -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/DerivedSources/arm64 -Xcc -I/Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/DerivedSources -Xcc -DDEBUG=1 -module-name CrashTest -frontend-parseable-output -disable-clang-spi -target-sdk-version 14.0 -target-sdk-name macosx14.0 -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/local/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -plugin-path /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -o /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Build/Intermediates.noindex/CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.o -index-unit-output-path /CrashTest.build/Debug/CrashTest.build/Objects-normal/arm64/main.o -index-store-path /Users/jamesmadeira/Library/Developer/Xcode/DerivedData/CrashTest-arpsknbrjiutkreycvszovrpqgfx/Index.noindex/DataStore -index-system-modules
1.	Apple Swift version 5.9 (swiftlang-5.9.0.128.106 clang-1500.0.40.1)
2.	Compiling with the current language version
3.	While evaluating request IRGenRequest(IR Generation for file "/Users/jamesmadeira/Library/Mobile Documents/com~apple~CloudDocs/Developer/CrashTest/CrashTest/main.swift")
4.	While emitting IR SIL function "@$s9CrashTest1fyyxxQpRvzlF".
 for 'f(_:)' (at /Users/jamesmadeira/Library/Mobile Documents/com~apple~CloudDocs/Developer/CrashTest/CrashTest/main.swift:18:1)
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  swift-frontend           0x00000001030db7b4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000105c59f0c llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x000000010199b720 SignalHandler(int) + 352
3  libsystem_platform.dylib 0x00000001823c6a24 _sigtramp + 56
4  swift-frontend           0x00000001052bf6b8 (anonymous namespace)::IRGenSILFunction::visitSILBasicBlock(swift::SILBasicBlock*) + 96784
5  swift-frontend           0x00000001052bf6b8 (anonymous namespace)::IRGenSILFunction::visitSILBasicBlock(swift::SILBasicBlock*) + 96784
6  swift-frontend           0x0000000105283ca0 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 11680
7  swift-frontend           0x0000000102fcb748 swift::irgen::IRGenerator::emitGlobalTopLevel(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const&) + 2516
8  swift-frontend           0x0000000104a87d80 swift::IRGenRequest::evaluate(swift::Evaluator&, swift::IRGenDescriptor) const + 6532
9  swift-frontend           0x0000000102c6ad5c swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::IRGenRequest const&, swift::Evaluator&) + 176
10 swift-frontend           0x0000000102957260 llvm::Expected<swift::IRGenRequest::OutputType> swift::Evaluator::getResultUncached<swift::IRGenRequest>(swift::IRGenRequest const&) + 1480
11 swift-frontend           0x00000001015aabe8 swift::performIRGeneration(swift::FileUnit*, swift::IRGenOptions const&, swift::TBDGenOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::GlobalVariable**) + 264
12 swift-frontend           0x0000000105c0d284 generateIR(swift::IRGenOptions const&, swift::TBDGenOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, llvm::GlobalVariable*&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>) + 156
13 swift-frontend           0x00000001054ef588 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*) + 1596
14 swift-frontend           0x0000000105c118fc performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1748
15 swift-frontend           0x0000000105c15454 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 4568
16 swift-frontend           0x000000010555b4c0 swift::mainEntry(int, char const**) + 4116
17 dyld                     0x000000018203ff28 start + 2236
Crash backtrace when building in SwiftFiddle (includes assertion failure message)
Swift version 5.9-dev (LLVM 46ac717ed0ec21c, Swift 05fe36c7b352712)               23:26:32 9s
Target: x86_64-unknown-linux-gnu
swift-frontend: /home/build-user/swift/lib/AST/SubstitutionMap.cpp:237: auto swift::SubstitutionMap::get(swift::GenericSignature, swift::InFlightSubstitution &)::(anonymous class)::operator()(swift::GenericTypeParamType *, bool) const: Assertion `(!replacement || replacement->hasError() || gp->isParameterPack() == replacement->is<PackType>()) && "replacement for pack parameter must be a pack type"' failed.
Stack dump:
0.      Program arguments: /usr/bin/swift-frontend -frontend -interpret /main.swift -disable-objc-interop -I swiftfiddle.com/_Packages/.build/release -color-diagnostics -new-driver-path /usr/bin/swift-driver -empty-abi-descriptor -resource-dir /usr/lib/swift -module-name main -plugin-path /usr/lib/swift/host/plugins -plugin-path /usr/local/lib/swift/host/plugins -l_Packages
1.      Swift version 5.9-dev (LLVM 46ac717ed0ec21c, Swift 05fe36c7b352712)
2.      Compiling with the current language version
3.      While evaluating request TypeCheckSourceFileRequest(source_file "/main.swift")
4.      While evaluating request TypeCheckFunctionBodyRequest(main.(file).f@/main.swift:9:6)
5.      While type-checking statement at [/main.swift:9:36 - line:11:1] RangeText="{
    _ = S(elements: (repeat each t))
"
6.      While type-checking expression at [/main.swift:10:5 - line:10:36] RangeText="_ = S(elements: (repeat each t)"
7.      While type-checking-target starting at /main.swift:10:5
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
/usr/bin/swift-frontend(+0x6fdbec3)[0x5602cb8f1ec3]
/usr/bin/swift-frontend(+0x6fd9bbe)[0x5602cb8efbbe]
/usr/bin/swift-frontend(+0x6fdc23f)[0x5602cb8f223f]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x14420)[0x7fb34a2c9420]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fb3496fd00b]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fb3496dc859]
/lib/x86_64-linux-gnu/libc.so.6(+0x22729)[0x7fb3496dc729]
/lib/x86_64-linux-gnu/libc.so.6(+0x33fd6)[0x7fb3496edfd6]
/usr/bin/swift-frontend(+0x28b0c93)[0x5602c71c6c93]
/usr/bin/swift-frontend(+0x279b5aa)[0x5602c70b15aa]
/usr/bin/swift-frontend(+0x28aeab7)[0x5602c71c4ab7]
/usr/bin/swift-frontend(+0x28ae9ec)[0x5602c71c49ec]
/usr/bin/swift-frontend(+0x28ea32a)[0x5602c720032a]
/usr/bin/swift-frontend(+0x2155dae)[0x5602c6a6bdae]
/usr/bin/swift-frontend(+0x28eca36)[0x5602c7202a36]
/usr/bin/swift-frontend(+0x28eca93)[0x5602c7202a93]
/usr/bin/swift-frontend(+0x28eca10)[0x5602c7202a10]
/usr/bin/swift-frontend(+0x214ed5c)[0x5602c6a64d5c]
/usr/bin/swift-frontend(+0x2153ea1)[0x5602c6a69ea1]
/usr/bin/swift-frontend(+0x25f872c)[0x5602c6f0e72c]
/usr/bin/swift-frontend(+0x25fb866)[0x5602c6f11866]
/usr/bin/swift-frontend(+0x25f881d)[0x5602c6f0e81d]
/usr/bin/swift-frontend(+0x25fb635)[0x5602c6f11635]
/usr/bin/swift-frontend(+0x25f8802)[0x5602c6f0e802]
/usr/bin/swift-frontend(+0x25f8703)[0x5602c6f0e703]
/usr/bin/swift-frontend(+0x2153e04)[0x5602c6a69e04]
/usr/bin/swift-frontend(+0x25f872c)[0x5602c6f0e72c]
/usr/bin/swift-frontend(+0x25f8703)[0x5602c6f0e703]
/usr/bin/swift-frontend(+0x214eb7e)[0x5602c6a64b7e]
/usr/bin/swift-frontend(+0x20d85c7)[0x5602c69ee5c7]
/usr/bin/swift-frontend(+0x217853c)[0x5602c6a8e53c]
/usr/bin/swift-frontend(+0x217832d)[0x5602c6a8e32d]
/usr/bin/swift-frontend(+0x2178214)[0x5602c6a8e214]
/usr/bin/swift-frontend(+0x227702d)[0x5602c6b8d02d]
/usr/bin/swift-frontend(+0x227adfc)[0x5602c6b90dfc]
/usr/bin/swift-frontend(+0x2278afc)[0x5602c6b8eafc]
/usr/bin/swift-frontend(+0x2277e7f)[0x5602c6b8de7f]
/usr/bin/swift-frontend(+0x271b193)[0x5602c7031193]
/usr/bin/swift-frontend(+0x271af49)[0x5602c7030f49]
/usr/bin/swift-frontend(+0x266c488)[0x5602c6f82488]
/usr/bin/swift-frontend(+0x266c43d)[0x5602c6f8243d]
/usr/bin/swift-frontend(+0x22bc7c1)[0x5602c6bd27c1]
/usr/bin/swift-frontend(+0x22bf1e4)[0x5602c6bd51e4]
/usr/bin/swift-frontend(+0x22bef82)[0x5602c6bd4f82]
/usr/bin/swift-frontend(+0x22bc584)[0x5602c6bd2584]
/usr/bin/swift-frontend(+0x22bc564)[0x5602c6bd2564]
/usr/bin/swift-frontend(+0x102bf49)[0x5602c5941f49]
/usr/bin/swift-frontend(+0x102178e)[0x5602c593778e]
/usr/bin/swift-frontend(+0x10216d7)[0x5602c59376d7]
/usr/bin/swift-frontend(+0xdad5de)[0x5602c56c35de]
/usr/bin/swift-frontend(+0xd9aa8b)[0x5602c56b0a8b]
/usr/bin/swift-frontend(+0xd995fe)[0x5602c56af5fe]
/usr/bin/swift-frontend(+0xbf9143)[0x5602c550f143]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fb3496de083]
/usr/bin/swift-frontend(+0xbf887e)[0x5602c550e87e]
Aborted (core dumped)

Steps to reproduce
Try to compile the following program.

struct S<each Element> {
    var elements: (repeat each Element)
}

func f<each T>(_ t: repeat each T) {
    _ = S(elements: (repeat each t))
}

Here's a SwiftFiddle with this code.

Expected behavior
The compiler doesn't crash.

Environment (for Xcode backtrace)

  • Swift compiler version info swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.106 clang-1500.0.40.1) Target: arm64-apple-macosx13.0
  • Xcode version info Xcode 15.0 Build version 15A5229h (Beta 7)
  • Deployment target: macOS 14.0

Additional context

  • This code doesn't crash if the generic parameters of S are specified in the initializer expression.
struct S<each Element> {
    var elements: (repeat each Element)
}

func f<each T>(_ t: repeat each T) {
    _ = S<repeat each T>(elements: (repeat each t))
}

// compiles successfully
  • For some reason, if a class is used instead of a structure, then the code successfully compiles in Xcode but still crashes the compiler in SwiftFiddle.
class C<each Element> {
    var elements: (repeat each Element)
    init(elements: (repeat each Element)) {
      self.elements = elements
    }
    // initializer added because classes don't have default memberwise initializers
}

func f<each T>(_ t: repeat each T) {
    _ = C(elements: (repeat each t))
}

// compiles successfully in Xcode
// crashes the compiler in SwiftFiddle

Metadata

Metadata

Assignees

No one assigned

    Labels

    assertion failureBug → crash: An assertion failurebugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwareexpressionsFeature: expressionsgenericsFeature: generic declarations and typespack expansionsFeature → expressions: Pack expansion expressionsparameter packsFeature → generics: Parameter packspropertiesFeature: propertiesswift 5.9tuplesFeature: tuplestype checkerArea → compiler: Semantic analysistypesFeature: types

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions