Description
Description
The code shown below generates a signal 6
when an attempt is made to build DocC-style documentation via swift package generate-documentation
. This affects some toolchains, but not others.
It is sufficient to invoke the generation of documentation via an effected toolchain via:
/Library/Developer/Toolchains/swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-13-a.xctoolchain/usr/bin/swift package generate-documentation
Reproduction
This project requires one dependency:
dependencies: [.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0")]
Adding this dependency will also pull in swift-docc-symbolkit
.
Copy and paste the following code into a new project with the above dependency.
import _Differentiation
extension Array where Element: Differentiable {func a(o: inout TangentVector) {}}
public extension Sequence where Self: Collection, Self: Differentiable, Self.TangentVector: RangeReplaceableCollection, Self.TangentVector.Element == Element.TangentVector, Element: Differentiable, Element: Comparable
,Index == Self.TangentVector.Index
{
@derivative(of: min) func v() -> (value: Element?, pullback: (Element?.TangentVector) -> (Self.TangentVector)) {return (value: withoutDerivative(at: self.indices.min{self[$0] < self[$1]}).map {self[$0]}, pullback: {v in return Self.TangentVector(repeating: .zero, count: 1)})}
}
Then, run:
swift package generate-documentation
via the command line, or via Xcode:
Product -> Build Documentation
.
Stack dump
The stack dump has been formatted for easier readability.
error: unspecified("signalled(6): /Library/Developer/Toolchains/swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-13-a.xctoolchain/usr/bin/swift-symbolgraph-extract -sdk /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk -F /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -I /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -L /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -I /Users/user/aaa/.build/arm64-apple-macosx/debug/Modules -module-name aaa -target arm64-apple-macosx10.13 -module-cache-path /Users/user/aaa/.build/arm64-apple-macosx/debug/ModuleCache -minimum-access-level internal -skip-inherited-docs -emit-extension-block-symbols -output-dir /Users/user/aaa/.build/arm64-apple-macosx/extracted-symbols/aaa/aaa output:
Term verification failed
Initial term: τ_0_0.[Differentiable:TangentVector]
Erased term: τ_0_0.TangentVector
Simplified term: τ_0_0.TangentVector
Requirement machine for <τ_0_0 where τ_0_0 : Sequence>
Rewrite system: {
- [Sequence].[Sequence] => [Sequence] [permanent]
- [Sequence].Element => [Sequence:Element] [permanent]
- [Sequence].Iterator => [Sequence:Iterator] [permanent]
- [Sequence].[Copyable] => [Sequence] [explicit]
- [Sequence].[Escapable] => [Sequence] [explicit]
- [Sequence:Iterator].[IteratorProtocol:Element] => [Sequence:Element] [explicit]
- [Sequence:Iterator].[IteratorProtocol] => [Sequence:Iterator] [explicit]
- [Sequence].Generator => [Sequence:Iterator] [explicit]
- [Sequence].[Sequence:Element] => [Sequence:Element]
- [Sequence].[Sequence:Iterator] => [Sequence:Iterator]
- [Sequence:Element].[Copyable] => [Sequence:Element]
- [Sequence:Element].[Escapable] => [Sequence:Element]
- [Sequence:Iterator].Element => [Sequence:Element]
- [Sequence:Iterator].[Copyable] => [Sequence:Iterator]
- [Sequence:Iterator].[Escapable] => [Sequence:Iterator]
- [Copyable].[Copyable] => [Copyable] [permanent]
- [Escapable].[Escapable] => [Escapable] [permanent]
- [IteratorProtocol].[IteratorProtocol] => [IteratorProtocol] [permanent]
- [IteratorProtocol].Element => [IteratorProtocol:Element] [permanent]
- [IteratorProtocol].[Copyable] => [IteratorProtocol] [explicit]
- [IteratorProtocol].[Escapable] => [IteratorProtocol] [explicit]
- [IteratorProtocol:Element].[Copyable] => [IteratorProtocol:Element] [explicit]
- [IteratorProtocol:Element].[Escapable] => [IteratorProtocol:Element] [explicit]
- [IteratorProtocol].[IteratorProtocol:Element] => [IteratorProtocol:Element]
- τ_0_0.[Sequence] => τ_0_0 [explicit]
- τ_0_0.Element => τ_0_0.[Sequence:Element]
- τ_0_0.Iterator => τ_0_0.[Sequence:Iterator]
- τ_0_0.[Copyable] => τ_0_0
- τ_0_0.[Escapable] => τ_0_0
- τ_0_0.Generator => τ_0_0.[Sequence:Iterator]
}
Property map: {
[Sequence] => { conforms_to: [Sequence Copyable Escapable] }
[Sequence:Iterator] => { conforms_to: [IteratorProtocol Copyable Escapable] }
[Sequence:Element] => { conforms_to: [Copyable Escapable] }
[Copyable] => { conforms_to: [Copyable] }
[Escapable] => { conforms_to: [Escapable] }
[IteratorProtocol] => { conforms_to: [IteratorProtocol Copyable Escapable] }
[IteratorProtocol:Element] => { conforms_to: [Copyable Escapable] }
τ_0_0 => { conforms_to: [Sequence Copyable Escapable] }
}
Conformance paths: {
}
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /Library/Developer/Toolchains/swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-13-a.xctoolchain/usr/bin/swift-symbolgraph-extract -sdk /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk -F /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -I /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -L /Users/user/Downloads/Xcode15RC1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -I /Users/user/aaa/.build/arm64-apple-macosx/debug/Modules -module-name aaa -target arm64-apple-macosx10.13 -module-cache-path /Users/user/aaa/.build/arm64-apple-macosx/debug/ModuleCache -minimum-access-level internal -skip-inherited-docs -emit-extension-block-symbols -output-dir /Users/user/aaa/.build/arm64-apple-macosx/extracted-symbols/aaa/aaa
1. Apple Swift version 6.0-dev (LLVM a41678ee19c803d, Swift ce381e7b159dfac)
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 0x00000001060a4e40 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1 swift-frontend 0x00000001060a360c llvm::sys::RunSignalHandlers() + 112
2 swift-frontend 0x00000001060a5488 SignalHandler(int) + 304
3 libsystem_platform.dylib 0x0000000188935a24 _sigtramp + 56
4 libsystem_pthread.dylib 0x0000000188905cc0 pthread_kill + 288
5 libsystem_c.dylib 0x0000000188811a40 abort + 180
6 swift-frontend 0x00000001065fd03c swift::rewriting::RequirementMachine::verify(swift::rewriting::MutableTerm const&) const (.cold.3) + 0
7 swift-frontend 0x00000001024aac7c swift::rewriting::RequirementMachine::verify(swift::rewriting::MutableTerm const&) const + 1016
8 swift-frontend 0x00000001024aafc8 swift::rewriting::RequirementMachine::requiresProtocol(swift::Type, swift::ProtocolDecl const*) const + 136
9 swift-frontend 0x00000001025148c8 swift::SubstitutionMap::lookupConformance(swift::CanType, swift::ProtocolDecl*) const + 284
10 swift-frontend 0x00000001025476f0 swift::LookUpConformanceInSubstitutionMap::operator()(swift::CanType, swift::Type, swift::ProtocolDecl*) const + 136
11 swift-frontend 0x0000000102548fac swift::InFlightSubstitution::lookupConformance(swift::CanType, swift::Type, swift::ProtocolDecl*, unsigned int) + 52
12 swift-frontend 0x000000010254815c getMemberForBaseType(swift::InFlightSubstitution&, swift::Type, swift::Type, swift::AssociatedTypeDecl*, swift::Identifier, unsigned int) + 620
13 swift-frontend 0x000000010254ba8c std::__1::optional<swift::Type> llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*)>::callback_fn<substType(swift::Type, unsigned int, swift::InFlightSubstitution&)::$_4>(long, swift::TypeBase*) + 416
14 swift-frontend 0x00000001025280b4 swift::Type::transformWithPosition(swift::TypePosition, llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*, swift::TypePosition)>) const + 112
15 swift-frontend 0x000000010252a4e0 swift::Type::transformRec(llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*)>) const + 36
16 swift-frontend 0x0000000102549318 substType(swift::Type, unsigned int, swift::InFlightSubstitution&) + 348
17 swift-frontend 0x0000000102549140 swift::Type::subst(swift::SubstitutionMap, swift::SubstOptions) const + 212
18 swift-frontend 0x00000001017aa4a4 swift::Requirement swift::Requirement::subst<swift::SubstitutionMap&>(swift::SubstitutionMap&) const + 216
19 swift-frontend 0x00000001018a0e24 swift::SynthesizedExtensionAnalyzer::Implementation::isApplicable(swift::ExtensionDecl*, bool, swift::ExtensionDecl*, swift::NormalProtocolConformance*)::\'lambda\'(swift::SubstitutionMap, swift::ExtensionDecl*, llvm::ArrayRef<swift::Requirement>)::operator()(swift::SubstitutionMap, swift::ExtensionDecl*, llvm::ArrayRef<swift::Requirement>) const + 500
20 swift-frontend 0x00000001018a08d0 swift::SynthesizedExtensionAnalyzer::Implementation::isApplicable(swift::ExtensionDecl*, bool, swift::ExtensionDecl*, swift::NormalProtocolConformance*) + 464
21 swift-frontend 0x00000001018a0214 swift::SynthesizedExtensionAnalyzer::Implementation::collectSynthesizedExtensionInfo(std::__1::vector<swift::SynthesizedExtensionAnalyzer::Implementation::ExtensionMergeGroup, std::__1::allocator<swift::SynthesizedExtensionAnalyzer::Implementation::ExtensionMergeGroup>>&)::\'lambda\'(swift::ExtensionDecl*, bool, swift::ExtensionDecl*, swift::NormalProtocolConformance*)::operator()(swift::ExtensionDecl*, bool, swift::ExtensionDecl*, swift::NormalProtocolConformance*) const + 164
22 swift-frontend 0x000000010189fb64 swift::SynthesizedExtensionAnalyzer::Implementation::collectSynthesizedExtensionInfo(std::__1::vector<swift::SynthesizedExtensionAnalyzer::Implementation::ExtensionMergeGroup, std::__1::allocator<swift::SynthesizedExtensionAnalyzer::Implementation::ExtensionMergeGroup>>&) + 704
23 swift-frontend 0x000000010189f0e0 swift::SynthesizedExtensionAnalyzer::SynthesizedExtensionAnalyzer(swift::NominalTypeDecl*, swift::PrintOptions, bool) + 156
24 swift-frontend 0x0000000101878100 swift::symbolgraphgen::SymbolGraph::recordConformanceSynthesizedMemberRelationships(swift::symbolgraphgen::Symbol) + 292
25 swift-frontend 0x0000000101877d64 swift::symbolgraphgen::SymbolGraph::recordNode(swift::symbolgraphgen::Symbol) + 116
26 swift-frontend 0x0000000101880764 swift::symbolgraphgen::SymbolGraphASTWalker::walkToDeclPre(swift::Decl*, swift::CharSourceRange) + 364
27 swift-frontend 0x00000001018bde48 (anonymous namespace)::SemaAnnotator::walkToDeclPre(swift::Decl*) + 1904
28 swift-frontend 0x000000010226c0d4 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 252
29 swift-frontend 0x000000010226bfcc swift::Decl::walk(swift::ASTWalker&) + 32
30 swift-frontend 0x00000001018bc720 swift::SourceEntityWalker::walk(swift::Decl*) + 200
31 swift-frontend 0x000000010187f5f8 swift::symbolgraphgen::emitSymbolGraphForModule(swift::ModuleDecl*, swift::symbolgraphgen::SymbolGraphOptions const&) + 468
32 swift-frontend 0x0000000100a71454 swift_symbolgraph_extract_main(llvm::ArrayRef<char const*>, char const*, void*) + 6712
33 swift-frontend 0x0000000100a1aa90 swift::mainEntry(int, char const**) + 8640
34 dyld 0x00000001885850e0 start + 2360
")
Expected behavior
The generation of documentation (Generated DocC archive
) should complete successfully, without crashing.
Environment
Toolchains that can cause a crash:
swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-13-a
swift-DEVELOPMENT-SNAPSHOT-2024-06-13-a
A toolchain that is not affected:
swift-DEVELOPMENT-SNAPSHOT-2024-07-07-a
The above pertains to MacOS 14.2.1.
Additional information
Commenting out any of lines 2, 4, or 6 will cause the generation of documentation to succeed. (This is the reason why ,Index == Self.TangentVector.Index
is on a separate line).
Although the reproducer itself will build correctly both in Debug and Release mode, it is the generation of the DocC documentation that can cause a crash with certain toolchains.
Contents of Package.resolved
:
{
"pins" : [
{
"identity" : "swift-docc-plugin",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-docc-plugin",
"state" : {
"revision" : "26ac5758409154cc448d7ab82389c520fa8a8247",
"version" : "1.3.0"
}
},
{
"identity" : "swift-docc-symbolkit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-docc-symbolkit",
"state" : {
"revision" : "b45d1f2ed151d057b54504d653e0da5552844e34",
"version" : "1.0.0"
}
}
],
"version" : 2
}
Here is a potentially related issue; it is the only search result for Term Verification Failed
:
#66596
If the documentation is generated in Xcode via Product -> Build Documentation
, the following stack frames will be shown (there is some overlap between the stack trace shown below and the stack trace shown above):
30 swift-frontend 0x00000001051d0720 swift::SourceEntityWalker::walk(swift::Decl*) + 200
31 swift-frontend 0x00000001051935f8 swift::symbolgraphgen::emitSymbolGraphForModule(swift::ModuleDecl*, swift::symbolgraphgen::SymbolGraphOptions const&) + 468
32 swift-frontend 0x000000010477e664 swift::serialize(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SerializationOptions const&, swift::symbolgraphgen::SymbolGraphOptions const&, swift::SILModule const*, swift::fine_grained_dependencies::SourceFileDepGraph const*) + 420
33 swift-frontend 0x0000000104516fb4 std::__1::__function::__func<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*)::$_30, std::__1::allocator<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*)::$_30>, void ()>::operator()() + 308
34 swift-frontend 0x00000001053b41e8 swift::SILModule::serialize() + 44
35 swift-frontend 0x0000000105063778 SerializeSILPass::run() + 156
36 swift-frontend 0x0000000104f14a38 swift::SILPassManager::runModulePass(unsigned int) + 856
37 swift-frontend 0x0000000104f16ddc swift::SILPassManager::execute() + 624
38 swift-frontend 0x0000000104f117c8 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) + 72
39 swift-frontend 0x0000000104f11748 swift::ExecuteSILPipelineRequest::evaluate(swift::Evaluator&, swift::SILPipelineExecutionDescriptor) const + 68
40 swift-frontend 0x0000000104f4cb50 swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::__1::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) + 28
41 swift-frontend 0x0000000104f2d0ac 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'()) + 204
42 swift-frontend 0x0000000104f119a4 swift::executePassPipelinePlan(swift::SILModule*, swift::SILPassPipelinePlan const&, bool, swift::irgen::IRGenModule*) + 64
43 swift-frontend 0x0000000104f2f728 swift::runSILOptimizationPasses(swift::SILModule&) + 156
44 swift-frontend 0x0000000104753120 swift::CompilerInstance::performSILProcessing(swift::SILModule*) + 636
45 swift-frontend 0x000000010451303c 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*) + 796
46 swift-frontend 0x0000000104512938 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1216
47 swift-frontend 0x000000010451e404 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 160
48 swift-frontend 0x00000001045145e0 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 708
49 swift-frontend 0x0000000104513cb4 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2344
50 swift-frontend 0x000000010432d4e8 swift::mainEntry(int, char const**) + 3096
51 dyld 0x00000001885850e0 start + 2360
Both of these stack traces are generated via the swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-13-a
toolchain.