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-14709] Inactive constraints left in constraint system during code completion #57059

Closed
ahoppen opened this issue Jun 2, 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 Jun 2, 2021

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

md5: 222afd77281b6bcaaac66967aec9b8ca

Issue Description:

The test case below crashes with LLVM ERROR: Inactive constraints left over? during code completion.

// RUN: %swift-ide-test --code-completion --source-filename %s --code-completion-token=COMPLETE -I %S/Inputs/

struct Listing {}

protocol View2 {}

extension View2 {
    func onTapGesturf(perform action: () -> Void) -> some View2 { fatalError() }
}

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

struct HStack2<Content> : View2 {
    init(@ViewBuilder2 content: () -> Content) { fatalError() }
}

struct ItemImage2 : View2 {
    init(path: String) {}
}

struct ForEach2<Data, Content>: View2 {
    init(_ data: [Listing], @ViewBuilder2 content: (Data) -> Content)
}


struct TodayNookazonSection {
    
    let listings: [Listing]
    @ViewBuilder2 var body: some View2 {
        ForEach2(listings) { listing in
            HStack2 {
                HStack2 {
                    ItemImage2(path#^COMPLETE^#: "abc")
                }
                .onTapGesturf {
                    listing
                }
            }
        }
    }
}

Stack trace:

Score: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Type Variables:
  $T78 [noescape allowed] as () -> $T79 @ locator@0x7feeb085e1e8 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:31]
  $T79 as Void @ locator@0x7feeb085e230 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:31 -> closure result]
  $T88 [lvalue allowed] [noescape allowed] equivalent to $T54 @ locator@0x7feeb0855840 [DeclRef@/Users/alex/swift-src/swift/test/SourceKit/test.swift:39:21]

Active Constraints:

Inactive Constraints:
  $T54 conv $T79 [[locator@0x7feeb0855890 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:31 -> type of a closure body]]];

Retired Constraints:
  $T79 subtype Void [[locator@0x7feeb0855928 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:18 -> apply argument -> comparing call argument #&#8203;0 to parameter #&#8203;0 -> function result]]];
  $T78 arg conv () -> Void [[locator@0x7feeb085e460 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:18 -> apply argument -> comparing call argument #&#8203;0 to parameter #&#8203;0]]];
  $T78 closure can default to () -> $T79 [[locator@0x7feeb085e1e8 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:31]]];
  $T56 arg conv () -> $T55 [[locator@0x7feeb0851630 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:13 -> apply argument -> comparing call argument #&#8203;0 to parameter #&#8203;0]]];
  $T56 closure can default to () -> $T57 [[locator@0x7feeb0841710 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:21]]];
  disjunction [[locator@0x7feeb0854f50 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:21 -> member]]]:
>  [disabled] $T82 bound to decl swift_ide_test.(file).ViewBuilder2.buildBlock()@/Users/alex/swift-src/swift/test/SourceKit/test.swift:12:15 : (ViewBuilder2.Type) -> () -> Never [[locator@0x7feeb0854f50 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:21 -> member]]];
>             $T82 bound to decl swift_ide_test.(file).ViewBuilder2.buildBlock@/Users/alex/swift-src/swift/test/SourceKit/test.swift:13:15 : <Content where Content : View2> (ViewBuilder2.Type) -> (Content) -> Content [[locator@0x7feeb0854f50 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:21 -> member]]];
  $T4 closure can default to ($T5) -> $T6 [[locator@0x7feeb0823eb8 [Closure@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:28]]];
  $T4 arg conv ($T0) -> $T1 [[locator@0x7feeb08248c0 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:9 -> apply argument -> comparing call argument #&#8203;1 to parameter #&#8203;1]]];
  disjunction [[locator@0x7feeb08694c0 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:28 -> member]]]:
>  [disabled] $T63 bound to decl swift_ide_test.(file).ViewBuilder2.buildBlock()@/Users/alex/swift-src/swift/test/SourceKit/test.swift:12:15 : (ViewBuilder2.Type) -> () -> Never [[locator@0x7feeb08694c0 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:28 -> member]]];
>             $T63 bound to decl swift_ide_test.(file).ViewBuilder2.buildBlock@/Users/alex/swift-src/swift/test/SourceKit/test.swift:13:15 : <Content where Content : View2> (ViewBuilder2.Type) -> (Content) -> Content [[locator@0x7feeb08694c0 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:28 -> member]]];
Resolved overloads:
  selected overload set choice self: $T2 == TodayNookazonSection
  selected overload set choice TodayNookazonSection.listings: $T3 == [Listing]
  selected overload set choice ForEach2<$T0, $T1>.Type.init: $T8 == ([Listing], ($T9) -> $T10) -> ForEach2<$T0, $T1>
  selected overload set choice $__builder0: $T14 == @lvalue $T12
  selected overload set choice ViewBuilder2.Type.buildBlock: $T13 == ($T16) -> $T16
  selected overload set choice $__builder1: $T18 == @lvalue $T17
  selected overload set choice HStack2<$T55>.Type.init: $T59 == (() -> $T60) -> HStack2<$T55>
  selected overload set choice $__builder0: $T64 == @lvalue $T62
  selected overload set choice ViewBuilder2.Type.buildBlock: $T63 == ($T66) -> $T66
  selected overload set choice $__builder1: $T68 == @lvalue $T67
  selected overload set choice HStack2<$T69>.Type.init: $T73 == (() -> $T74) -> HStack2<$T69>
  selected overload set choice HStack2<$T69>.onTapGesturf: $T76 == (() -> Void) -> some View2
  selected overload set choice $__builder0: $T83 == @lvalue $T81
  selected overload set choice ViewBuilder2.Type.buildBlock: $T82 == ($T85) -> $T85
  selected overload set choice $__builder1: $T87 == @lvalue $T86
  selected overload set choice listing: $T88 == $T54


Opened types:
  locator@0x7feeb0823c18 [Type@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:9] opens τ_0_0 -> $T0, τ_0_1 -> $T1
  locator@0x7feeb0824230 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:9 -> apply function -> constructor member] opens τ_0_0 -> $T9, τ_0_1 -> $T10
  locator@0x7feeb0824a78 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:32:40 -> member] opens τ_0_0 -> $T16
  locator@0x7feeb0841620 [Type@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:13] opens τ_0_0 -> $T55
  locator@0x7feeb0841980 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:13 -> apply function -> constructor member] opens τ_0_0 -> $T60
  locator@0x7feeb08694c0 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:33:28 -> member] opens τ_0_0 -> $T66
  locator@0x7feeb0852148 [Type@/Users/alex/swift-src/swift/test/SourceKit/test.swift:35:17] opens τ_0_0 -> $T69
  locator@0x7feeb08524b0 [Call@/Users/alex/swift-src/swift/test/SourceKit/test.swift:35:17 -> apply function -> constructor member] opens τ_0_0 -> $T74
  locator@0x7feeb085dc40 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:38:18 -> member] opens τ_0_0 -> $T77
  locator@0x7feeb0854f50 [UnresolvedDot@/Users/alex/swift-src/swift/test/SourceKit/test.swift:34:21 -> member] opens τ_0_0 -> $T85
LLVM ERROR: Inactive constraints left over?
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
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=COMPLETE -I /Users/alex/swift-src/swift/test/SourceKit/Inputs/
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(0x7feec091ec48 AbstractFunctionDecl name=_ : (no type set), )
4.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7feeb080bab8 AbstractClosureExpr line=34 : <null>, )
5.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7feeb080ba00 AbstractClosureExpr line=33 : <null>, )
6.  While evaluating request TypeCheckASTNodeAtLocRequest(0x7feec091ec48 AbstractFunctionDecl name=_ : (no type set), )
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           0x000000010c6b1c67 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1  swift-ide-test           0x000000010c6b0a88 llvm::sys::RunSignalHandlers() + 248
2  swift-ide-test           0x000000010c6b2296 SignalHandler(int) + 262
3  libsystem_platform.dylib 0x00007fff205ead7d _sigtramp + 29
4  libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603339973087904
5  libsystem_c.dylib        0x00007fff204fa411 abort + 120
6  swift-ide-test           0x000000010c60c042 llvm::report_fatal_error(llvm::Twine const&, bool) + 434
7  swift-ide-test           0x000000010c60be8b llvm::report_fatal_error(char const*, bool) + 43
8  swift-ide-test           0x0000000108a4b8ec swift::constraints::ComponentStep::take(bool) + 1596
9  swift-ide-test           0x0000000108a3bde1 swift::constraints::ConstraintSystem::solveImpl(llvm::SmallVectorImpl<swift::constraints::Solution>&) + 449
10 swift-ide-test           0x0000000108abb4f2 swift::constraints::ConstraintSystem::salvage() + 290
11 swift-ide-test           0x000000010898b1c9 swift::TypeChecker::applyResultBuilderBodyTransform(swift::FuncDecl*, swift::Type) + 969
12 swift-ide-test           0x0000000108c3f80e swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 254
13 swift-ide-test           0x0000000108c7bff3 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
14 swift-ide-test           0x0000000108c75e37 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
15 swift-ide-test           0x0000000108c75de1 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
16 swift-ide-test           0x0000000108c3f8f6 swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 486
17 swift-ide-test           0x0000000108c7bff3 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
18 swift-ide-test           0x0000000108c75e37 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
19 swift-ide-test           0x0000000108c75de1 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
20 swift-ide-test           0x0000000108c3f8f6 swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 486
21 swift-ide-test           0x0000000108c7bff3 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
22 swift-ide-test           0x0000000108c75e37 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
23 swift-ide-test           0x0000000108c75de1 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
24 swift-ide-test           0x0000000108c3f8f6 swift::TypeCheckASTNodeAtLocRequest::evaluate(swift::Evaluator&, swift::DeclContext*, swift::SourceLoc) const + 486
25 swift-ide-test           0x0000000108c7bff3 llvm::Expected<swift::TypeCheckASTNodeAtLocRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckASTNodeAtLocRequest>(swift::TypeCheckASTNodeAtLocRequest const&) + 243
26 swift-ide-test           0x0000000108c75e37 swift::TypeCheckASTNodeAtLocRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckASTNodeAtLocRequest>(swift::Evaluator&, swift::TypeCheckASTNodeAtLocRequest, swift::TypeCheckASTNodeAtLocRequest::OutputType) + 55
27 swift-ide-test           0x0000000108c75de1 swift::typeCheckASTNodeAtLoc(swift::DeclContext*, swift::SourceLoc) + 65
28 swift-ide-test           0x0000000107ffd923 swift::ide::typeCheckContextAt(swift::DeclContext*, swift::SourceLoc) + 771
29 swift-ide-test           0x0000000107fd670b (anonymous namespace)::CodeCompletionCallbacksImpl::doneParsing() + 1211
30 swift-ide-test           0x0000000108ee87c8 swift::Parser::performCodeCompletionSecondPassImpl(swift::CodeCompletionDelayedDeclState&) + 888
31 swift-ide-test           0x0000000108ee8348 swift::CodeCompletionSecondPassRequest::evaluate(swift::Evaluator&, swift::SourceFile*, swift::CodeCompletionCallbacksFactory*) const + 232
32 swift-ide-test           0x0000000108ef2a1f llvm::Expected<swift::CodeCompletionSecondPassRequest::OutputType> swift::Evaluator::getResultUncached<swift::CodeCompletionSecondPassRequest>(swift::CodeCompletionSecondPassRequest const&) + 271
33 swift-ide-test           0x0000000108ee8157 swift::CodeCompletionSecondPassRequest::OutputType swift::evaluateOrDefault<swift::CodeCompletionSecondPassRequest>(swift::Evaluator&, swift::CodeCompletionSecondPassRequest, swift::CodeCompletionSecondPassRequest::OutputType) + 55
34 swift-ide-test           0x0000000107ffbb01 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
35 swift-ide-test           0x0000000107ffbf98 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
36 swift-ide-test           0x0000000107c11ac0 doCodeCompletionImpl(swift::CodeCompletionCallbacksFactory*, swift::CompilerInvocation const&, llvm::StringRef, llvm::StringRef, llvm::StringRef, bool) + 1376
37 swift-ide-test           0x0000000107c04560 main + 26144
38 libdyld.dylib            0x00007fff205c0f3d start + 1
39 libdyld.dylib            0x000000000000000d start + 18446603339973259473
@hamishknight
Copy link
Collaborator

#38542

@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

3 participants