Skip to content
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

[SR-14979] Another Assertion failed: (knownBinding != typeBindings.end()) in solver-based key path completion #57321

Closed
ahoppen opened this issue Jul 26, 2021 · 1 comment
Assignees
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. code completion Area → source tooling: code completion found by stress tester Flag: An issue found by the SourceKit stress tester source tooling Area: IDE support, SourceKit, and other source tooling

Comments

@ahoppen
Copy link
Contributor

ahoppen commented Jul 26, 2021

Previous ID SR-14979
Radar rdar://81118700
Original Reporter @ahoppen
Type Bug
Status Resolved
Resolution Done
Additional Detail from JIRA
Votes 0
Component/s CodeCompletion
Labels Bug, FoundByStressTester
Assignee @ahoppen
Priority Medium

md5: 33ae05fb16ca9f013c7108f245522f1a

Issue Description:

The following test case crashes with an assertion failure:

// RUN: %swift-ide-test --code-completion --source-filename %s -code-completion-token CC

func foo() {
    let months: [[String]] = []
    
    let x = ForEach2(months, id: \.self) { group in
        HStack2(spacing: 3) {
            useKeyPath(id: \.self#^CC^#)
        }
    }
}


struct ForEach2<Data, ID> where Data : RandomAccessCollection {
    init(_ data: Data, id: KeyPath<Data.Element, ID>, content: @escaping (Data.Element) -> Void) {}
}

func useKeyPath(id: KeyPath<String, String>) {}

struct HStack2<Content> {
    init(spacing: Double, @ViewBuilder2 content: () -> Content)
}

@resultBuilder struct ViewBuilder2 {
  static func buildBlock<Content>(_ content: Content) -> Content { fatalError() }
}

Stack trace:

0.  Program arguments: /Users/alex/swift-src/nbuild/Release+Asserts/bin/swift-ide-test -module-cache-path /Users/alex/swift-src/nbuild/Release+Asserts/swift-test-results/x86_64-apple-macosx10.9/clang-module-cache -completion-cache-path /Users/alex/swift-src/nbuild/Release+Asserts/swift-test-results/x86_64-apple-macosx10.9/completion-cache -swift-version 4 --code-completion --source-filename /Users/alex/swift-src/swift/test/SourceKit/test.swift -code-completion-token CC
1.  While performing new completion
2.  While evaluating request CodeCompletionSecondPassRequest(source_file "/Users/alex/swift-src/swift/test/SourceKit/test.swift", )
3.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7faaf58f0660 AbstractFunctionDecl name=foo() : (no type set), )
4.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7faaf59177a8 AbstractClosureExpr line=6 : <null>, )
5.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7faaf58f0660 AbstractFunctionDecl name=foo() : (no type set), )
6.  While type-checking declaration 0x7faaf5917d10 (at /Users/alex/swift-src/swift/test/SourceKit/test.swift:6:5)
7.  While evaluating request PatternBindingEntryRequest((unknown decl), 0)
8.  While type-checking expression at [/Users/alex/swift-src/swift/test/SourceKit/test.swift:6:13 - line:10:5] RangeText="ForEach2(months, id: \.self) { group in
        HStack2(spacing: 3) {
            useKeyPath(id: \.self)
        }
    "
9.  While code-completion expression at [/Users/alex/swift-src/swift/test/SourceKit/test.swift:6:13 - line:10:5] RangeText="ForEach2(months, id: \.self) { group in
        HStack2(spacing: 3) {
            useKeyPath(id: \.self)
        }
    "
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-ide-test           0x0000000109c65f47 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1  swift-ide-test           0x0000000109c64e48 llvm::sys::RunSignalHandlers() + 248
2  swift-ide-test           0x0000000109c66576 SignalHandler(int) + 262
3  libsystem_platform.dylib 0x00007fff20441d7d _sigtramp + 29
4  libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603339974828704
5  libsystem_c.dylib        0x00007fff20351411 abort + 120
6  libsystem_c.dylib        0x00007fff203507e8 err + 0
7  swift-ide-test           0x000000010a110ed1 swift::constraints::Solution::getFixedType(swift::TypeVariableType*) const (.cold.1) + 33
8  swift-ide-test           0x0000000105f42425 swift::constraints::Solution::getFixedType(swift::TypeVariableType*) const + 181
9  swift-ide-test           0x0000000106073f04 swift::Type llvm::function_ref<swift::Type (swift::Type)>::callback_fn<swift::constraints::ConstraintSystem::simplifyTypeImpl(swift::Type, llvm::function_ref<swift::Type (swift::TypeVariableType*)>) const::$_21>(long, swift::Type) + 68
10 swift-ide-test           0x000000010549b712 llvm::Optional<swift::Type> llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>::callback_fn<swift::Type::transform(llvm::function_ref<swift::Type (swift::Type)>) const::$_20>(long, swift::TypeBase*) + 18
11 swift-ide-test           0x0000000105487466 swift::Type::transformRec(llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>) const + 86
12 swift-ide-test           0x0000000105487ac0 swift::Type::transformRec(llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>) const + 1712
13 swift-ide-test           0x0000000105475038 swift::Type::transform(llvm::function_ref<swift::Type (swift::Type)>) const + 40
14 swift-ide-test           0x0000000106062768 swift::constraints::Solution::simplifyType(swift::Type) const + 88
15 swift-ide-test           0x0000000106111169 swift::KeyPathTypeCheckCompletionCallback::sawSolution(swift::constraints::Solution const&) + 153
16 swift-ide-test           0x000000010610f6b9 swift::TypeChecker::typeCheckForCodeCompletion(swift::constraints::SolutionApplicationTarget&, bool, llvm::function_ref<void (swift::constraints::Solution const&)>)::$_1::operator()(swift::constraints::SolutionApplicationTarget&) const + 905
17 swift-ide-test           0x000000010610f1e6 swift::TypeChecker::typeCheckForCodeCompletion(swift::constraints::SolutionApplicationTarget&, bool, llvm::function_ref<void (swift::constraints::Solution const&)>) + 838
18 swift-ide-test           0x0000000106124271 swift::TypeChecker::typeCheckExpression(swift::constraints::SolutionApplicationTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 305
19 swift-ide-test           0x0000000106124630 swift::TypeChecker::typeCheckBinding(swift::Pattern*&, swift::Expr*&, swift::DeclContext*, swift::Type, swift::PatternBindingDecl*, unsigned int) + 112
20 swift-ide-test           0x00000001061248ab swift::TypeChecker::typeCheckPatternBinding(swift::PatternBindingDecl*, unsigned int, swift::Type) + 363
21 swift-ide-test           0x00000001061f36c7 swift::PatternBindingEntryRequest::evaluate(swift::Evaluator&, swift::PatternBindingDecl*, unsigned int) const + 919
22 swift-ide-test           0x0000000106227dfa llvm::Expected<swift::PatternBindingEntryRequest::OutputType> swift::Evaluator::getResultUncached<swift::PatternBindingEntryRequest>(swift::PatternBindingEntryRequest const&) + 426
23 swift-ide-test           0x0000000106227b77 llvm::Expected<swift::PatternBindingEntryRequest::OutputType> swift::Evaluator::getResultCached<swift::PatternBindingEntryRequest, (void*)0>(swift::PatternBindingEntryRequest const&) + 119
24 swift-ide-test           0x00000001062232e6 swift::PatternBindingEntryRequest::OutputType swift::evaluateOrDefault<swift::PatternBindingEntryRequest>(swift::Evaluator&, swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType) + 54
25 swift-ide-test           0x000000010615f104 swift::ASTVisitor<(anonymous namespace)::DeclChecker, void, void, void, void, void, void>::visit(swift::Decl*) + 2724
26 swift-ide-test           0x000000010615cd84 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 228
27 swift-ide-test           0x000000010615cc82 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 130
28 swift-ide-test           0x00000001061eb8fe swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 542
29 swift-ide-test           0x0000000106229643 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
30 swift-ide-test           0x0000000106223487 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
31 swift-ide-test           0x0000000106223431 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
32 swift-ide-test           0x00000001061eb8be swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 478
33 swift-ide-test           0x0000000106229643 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
34 swift-ide-test           0x0000000106223487 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
35 swift-ide-test           0x0000000106223431 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
36 swift-ide-test           0x00000001061eb8be swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 478
37 swift-ide-test           0x0000000106229643 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
38 swift-ide-test           0x0000000106223487 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
39 swift-ide-test           0x0000000106223431 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
40 swift-ide-test           0x00000001055753b3 swift::ide::typeCheckContextAt(swift::DeclContext*, swift::SourceLoc) + 771
41 swift-ide-test           0x000000010554d9de (anonymous namespace)::CodeCompletionCallbacksImpl::doneParsing() + 1630
42 swift-ide-test           0x0000000106499af8 swift::Parser::performCodeCompletionSecondPassImpl(swift::CodeCompletionDelayedDeclState&) + 888
43 swift-ide-test           0x0000000106499678 swift::CodeCompletionSecondPassRequest::evaluate(swift::Evaluator&, swift::SourceFile*, swift::CodeCompletionCallbacksFactory*) const + 232
44 swift-ide-test           0x00000001064a3e0f llvm::Expected<swift::CodeCompletionSecondPassRequest::OutputType> swift::Evaluator::getResultUncached<swift::CodeCompletionSecondPassRequest>(swift::CodeCompletionSecondPassRequest const&) + 271
45 swift-ide-test           0x0000000106499487 swift::CodeCompletionSecondPassRequest::OutputType swift::evaluateOrDefault<swift::CodeCompletionSecondPassRequest>(swift::Evaluator&, swift::CodeCompletionSecondPassRequest, swift::CodeCompletionSecondPassRequest::OutputType) + 55
46 swift-ide-test           0x00000001055735f1 swift::ide::CompletionInstance::performNewOperation(llvm::Optional<llvm::hash_code>, swift::CompilerInvocation&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, llvm::MemoryBuffer*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, swift::DiagnosticConsumer*, llvm::function_ref<void (swift::CompilerInstance&, bool)>) + 529
47 swift-ide-test           0x0000000105573a88 swift::ide::CompletionInstance::performOperation(swift::CompilerInvocation&, llvm::ArrayRef<char const*>, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, llvm::MemoryBuffer*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, swift::DiagnosticConsumer*, llvm::function_ref<void (swift::CompilerInstance&, bool)>) + 680
48 swift-ide-test           0x0000000105164750 doCodeCompletionImpl(swift::CodeCompletionCallbacksFactory*, swift::CompilerInvocation const&, llvm::StringRef, llvm::StringRef, llvm::StringRef, bool) + 1376
49 swift-ide-test           0x0000000105156ff0 main + 26240
50 libdyld.dylib            0x00007fff20417f5d start + 1
51 libdyld.dylib            0x000000000000000c start + 18446603339975000240
/Users/alex/swift-src/nbuild/Release+Asserts/tools/swift/test-macosx-x86_64/SourceKit/Output/test.swift.script: line 1: 96575 Abort trap: 6           '/Users/alex/swift-src/nbuild/Release+Asserts/bin/swift-ide-test' -module-cache-path /Users/alex/swift-src/nbuild/Release+Asserts/swift-test-results/x86_64-apple-macosx10.9/clang-module-cache -completion-cache-path '/Users/alex/swift-src/nbuild/Release+Asserts/swift-test-results/x86_64-apple-macosx10.9/completion-cache' -swift-version 4 --code-completion --source-filename /Users/alex/swift-src/swift/test/SourceKit/test.swift -code-completion-token CC
@ahoppen
Copy link
Contributor Author

ahoppen commented Aug 1, 2021

Fixed in #38648

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@AnthonyLatsis AnthonyLatsis added the source tooling Area: IDE support, SourceKit, and other source tooling label Feb 6, 2023
This issue was closed.
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. code completion Area → source tooling: code completion found by stress tester Flag: An issue found by the SourceKit stress tester source tooling Area: IDE support, SourceKit, and other source tooling
Projects
None yet
Development

No branches or pull requests

2 participants