Skip to content

typed-throws with nested generic type crashes compiler #77297

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
NachoSoto opened this issue Oct 30, 2024 · 2 comments · Fixed by #77371
Closed

typed-throws with nested generic type crashes compiler #77297

NachoSoto opened this issue Oct 30, 2024 · 2 comments · Fixed by #77371
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. crash Bug: A crash, i.e., an abnormal termination of software generics Feature: generic declarations and types typed throws Feature → error handling → throws & rethrows: Typed throws

Comments

@NachoSoto
Copy link
Contributor

NachoSoto commented Oct 30, 2024

Description

No response

Reproduction

struct T<Content> {
  enum Error: Swift.Error {}
  init() throws(Error) {}
}

Stack dump

0.	Program arguments: /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -interpret /tmp/test.swift -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.1.sdk -color-diagnostics -new-driver-path /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -empty-abi-descriptor -resource-dir /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -module-name test -disable-clang-spi -target-sdk-version 15.1 -target-sdk-name macosx15.1 -external-plugin-path /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -plugin-path /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode-16.1.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins
1.	Apple Swift version 6.0.2 (swiftlang-6.0.2.1.2 clang-1600.0.26.4)
2.	Compiling with effective version 5.10
3.	While running user code "/tmp/test.swift"
4.	While evaluating request IRGenRequest(IR Generation for module test)
5.	While emitting IR SIL function "@$s4test1TVACyxGyAC5ErrorOyx_GYKcfC".
 for 'init()' (at /tmp/test.swift:3:3)
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           0x000000010612a9ac llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000106128c00 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x000000010612af78 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x0000000180b58184 _sigtramp + 56
4  swift-frontend           0x00000001011112e8 (anonymous namespace)::IRGenSILFunction::emitSILFunction() + 6568
5  swift-frontend           0x00000001011112e8 (anonymous namespace)::IRGenSILFunction::emitSILFunction() + 6568
6  swift-frontend           0x000000010110f49c swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 2088
7  swift-frontend           0x0000000100f5b0a4 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&) + 3364
8  swift-frontend           0x00000001010c6cd0 swift::IRGenRequest::evaluate(swift::Evaluator&, swift::IRGenDescriptor) const + 4700
9  swift-frontend           0x000000010110e9e8 swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::IRGenRequest const&, swift::Evaluator&) + 176
10 swift-frontend           0x00000001010cfbc8 swift::IRGenRequest::OutputType swift::Evaluator::getResultUncached<swift::IRGenRequest, swift::IRGenRequest::OutputType swift::evaluateOrFatal<swift::IRGenRequest>(swift::Evaluator&, swift::IRGenRequest)::'lambda'()>(swift::IRGenRequest const&, swift::IRGenRequest::OutputType swift::evaluateOrFatal<swift::IRGenRequest>(swift::Evaluator&, swift::IRGenRequest)::'lambda'()) + 784
11 swift-frontend           0x00000001010c8614 swift::performIRGeneration(swift::ModuleDecl*, swift::IRGenOptions const&, swift::TBDGenOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, llvm::GlobalVariable**) + 2020
12 swift-frontend           0x0000000100b3888c generateModule(swift::CompilerInstance const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>) + 356
13 swift-frontend           0x0000000100b39600 swift::EagerSwiftMaterializationUnit::materialize(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility, std::__1::default_delete<llvm::orc::MaterializationResponsibility>>) + 68
14 swift-frontend           0x0000000100b528f0 llvm::orc::MaterializationTask::run() + 44
15 swift-frontend           0x0000000100b5c8dc void llvm::detail::UniqueFunctionBase<void, std::__1::unique_ptr<llvm::orc::Task, std::__1::default_delete<llvm::orc::Task>>>::CallImpl<void (*)(std::__1::unique_ptr<llvm::orc::Task, std::__1::default_delete<llvm::orc::Task>>)>(void*, std::__1::unique_ptr<llvm::orc::Task, std::__1::default_delete<llvm::orc::Task>>&) + 36
16 swift-frontend           0x0000000100b5518c llvm::orc::ExecutionSession::dispatchOutstandingMUs() + 296
17 swift-frontend           0x0000000100b5f068 llvm::orc::InProgressFullLookupState::complete(std::__1::unique_ptr<llvm::orc::InProgressLookupState, std::__1::default_delete<llvm::orc::InProgressLookupState>>) + 8220
18 swift-frontend           0x0000000100b4bae4 llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::__1::unique_ptr<llvm::orc::InProgressLookupState, std::__1::default_delete<llvm::orc::InProgressLookupState>>, llvm::Error) + 2696
19 swift-frontend           0x0000000100b4b010 llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind, std::__1::vector<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolLookupSet, llvm::orc::SymbolState, llvm::unique_function<void (llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef>>>)>, std::__1::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>>> const&)>) + 996
20 swift-frontend           0x0000000100b55318 llvm::orc::ExecutionSession::lookup(std::__1::vector<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolLookupSet, llvm::orc::LookupKind, llvm::orc::SymbolState, std::__1::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>>> const&)>) + 288
21 swift-frontend           0x0000000100b556c8 llvm::orc::ExecutionSession::lookup(std::__1::vector<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) + 272
22 swift-frontend           0x0000000100b7c8b8 llvm::orc::LLJIT::lookupLinkerMangled(llvm::orc::JITDylib&, llvm::orc::SymbolStringPtr) + 112
23 swift-frontend           0x0000000100b3a688 llvm::orc::LLJIT::lookup(llvm::orc::JITDylib&, llvm::StringRef) + 328
24 swift-frontend           0x0000000100b36524 swift::SwiftJIT::runMain(llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>) + 136
25 swift-frontend           0x0000000100b43f48 swift::RunImmediately(swift::CompilerInstance&, 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&, swift::IRGenOptions const&, swift::SILOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>&&) + 1028
26 swift-frontend           0x0000000100ad84e8 processCommandLineAndRunImmediately(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>&&, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::FrontendObserver*, int&) + 536
27 swift-frontend           0x0000000100ad3f4c 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*) + 2044
28 swift-frontend           0x0000000100ad362c swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 2888
29 swift-frontend           0x0000000100ad6660 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 2944
30 swift-frontend           0x0000000100ad4ea0 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
31 swift-frontend           0x0000000100a5bf64 swift::mainEntry(int, char const**) + 3680
32 dyld                     0x00000001807a0274 start + 2840
Segmentation fault: 11

Expected behavior

It compiles or produces a compilation error.

Environment

swift-driver version: 1.115 Apple Swift version 6.0.2 (swiftlang-6.0.2.1.2 clang-1600.0.26.4)
Target: arm64-apple-macosx15.0
@NachoSoto NachoSoto added bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. crash Bug: A crash, i.e., an abnormal termination of software triage needed This issue needs more specific labels labels Oct 30, 2024
@NachoSoto NachoSoto changed the title some T + typed-throws crashes compiler typed-throws with nested generic type crashes compiler Oct 30, 2024
@NachoSoto NachoSoto changed the title typed-throws with nested generic type crashes compiler typed-throws with nested generic type crashes compiler Oct 30, 2024
@hborla hborla added generics Feature: generic declarations and types typed throws Feature → error handling → throws & rethrows: Typed throws and removed triage needed This issue needs more specific labels labels Oct 31, 2024
@JessyCatterwaul
Copy link

I think this is a duplicate of #74289, which is not closed. (The examples here and there are still problematic in Xcode 16.2.)

@JessyCatterwaul
Copy link

JessyCatterwaul commented Mar 10, 2025

As I've noted there, your example now compiles. Instead, the crash now happens only upon actually trying to use an error instance. Progress!

struct T<Content> {
  enum Error: Swift.Error { case instance }
  init() throws(Error) { throw .instance }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. crash Bug: A crash, i.e., an abnormal termination of software generics Feature: generic declarations and types typed throws Feature → error handling → throws & rethrows: Typed throws
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants