Skip to content

index out of bounds panic in chalk_ir::SubstFolder::fold_free_var_ty #10046

@str4d

Description

@str4d

Environment

  • VSCode version: 1.59.1, Windows 10 with repo open in WSL remote.
  • rust-analyzer version: 996300f 2021-08-23 stable

To reproduce

Result

rust-analyzer panics twice: once at position 0,0, and again at a position within a line or so of my cursor. Any time I move my cursor (or I think even move my mouse above the multiexp.rs editor pane), another panic is triggered within a second or so.

Panic output
Panic context:
> 
version: 996300f4a 2021-08-23 stable
request: textDocument/codeAction CodeActionParams {
    text_document: TextDocumentIdentifier {
        uri: Url {
            scheme: "file",
            cannot_be_a_base: false,
            username: "",
            password: None,
            host: None,
            port: None,
            path: "/home/str4d/dev/rust/zkcrypto/bellman/src/multiexp.rs",
            query: None,
            fragment: None,
        },
    },
    range: Range {
        start: Position {
            line: 0,
            character: 0,
        },
        end: Position {
            line: 0,
            character: 0,
        },
    },
    context: CodeActionContext {
        diagnostics: [],
        only: None,
    },
    work_done_progress_params: WorkDoneProgressParams {
        work_done_token: None,
    },
    partial_result_params: PartialResultParams {
        partial_result_token: None,
    },
}

thread '<unnamed>' panicked at 'index out of bounds: the len is 1 but the index is 1', /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-ir-0.70.0/src/lib.rs:2752:10
stack backtrace:
   0: rust_begin_unwind
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:515:5
   1: core::panicking::panic_fmt
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:92:14
   2: core::panicking::panic_bounds_check
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:69:5
   3: <&chalk_ir::SubstFolder<I,A> as chalk_ir::fold::Folder<I>>::fold_free_var_ty
   4: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   5: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::GenericArg<I>>::fold_with
   6: <smallvec::SmallVec<A> as core::iter::traits::collect::Extend<<A as smallvec::Array>::Item>>::extend
   7: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::Substitution<I>>::fold_with
   8: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   9: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
  10: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  11: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  12: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  13: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  14: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  15: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  16: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  17: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  18: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  19: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  20: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  21: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  22: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  23: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  24: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  25: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  26: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  27: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  28: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  29: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  30: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  31: hir_ty::infer::infer_query
  32: salsa::runtime::Runtime::execute_query_implementation
  33: salsa::derived::slot::Slot<Q,MP>::read_upgrade
  34: salsa::derived::slot::Slot<Q,MP>::read
  35: <salsa::derived::DerivedStorage<Q,MP> as salsa::plumbing::QueryStorageOps<Q>>::try_fetch
  36: <DB as hir_ty::db::HirDatabase>::infer_query
  37: hir_ty::db::infer_wait
  38: hir::Function::diagnostics
  39: hir::Module::diagnostics
  40: ide_diagnostics::diagnostics
  41: ide::Analysis::assists_with_fixes::{{closure}}
  42: std::panicking::try
  43: rust_analyzer::handlers::handle_code_action
  44: rust_analyzer::dispatch::RequestDispatcher::on::{{closure}}::{{closure}}
  45: <F as threadpool::FnBox>::call_box
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Panic context:
> 
version: 996300f4a 2021-08-23 stable
request: rust-analyzer/inlayHints InlayHintsParams {
    text_document: TextDocumentIdentifier {
        uri: Url {
            scheme: "file",
            cannot_be_a_base: false,
            username: "",
            password: None,
            host: None,
            port: None,
            path: "/home/str4d/dev/rust/zkcrypto/bellman/src/multiexp.rs",
            query: None,
            fragment: None,
        },
    },
}

thread '<unnamed>' panicked at 'index out of bounds: the len is 1 but the index is 1', /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-ir-0.70.0/src/lib.rs:2752:10
stack backtrace:
   0: rust_begin_unwind
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:515:5
   1: core::panicking::panic_fmt
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:92:14
   2: core::panicking::panic_bounds_check
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:69:5
   3: <&chalk_ir::SubstFolder<I,A> as chalk_ir::fold::Folder<I>>::fold_free_var_ty
   4: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   5: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::GenericArg<I>>::fold_with
   6: <smallvec::SmallVec<A> as core::iter::traits::collect::Extend<<A as smallvec::Array>::Item>>::extend
   7: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::Substitution<I>>::fold_with
   8: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   9: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
  10: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  11: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  12: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  13: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  14: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  15: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  16: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  17: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  18: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  19: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  20: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  21: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  22: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  23: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  24: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  25: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  26: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  27: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  28: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  29: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  30: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  31: hir_ty::infer::infer_query
  32: salsa::runtime::Runtime::execute_query_implementation
  33: salsa::derived::slot::Slot<Q,MP>::read_upgrade
  34: salsa::derived::slot::Slot<Q,MP>::read
  35: <salsa::derived::DerivedStorage<Q,MP> as salsa::plumbing::QueryStorageOps<Q>>::try_fetch
  36: <DB as hir_ty::db::HirDatabase>::infer_query
  37: hir_ty::db::infer_wait
  38: hir::semantics::SemanticsImpl::analyze_impl
  39: hir::semantics::SemanticsImpl::scope
  40: ide::inlay_hints::inlay_hints
  41: std::panicking::try
  42: rust_analyzer::handlers::handle_inlay_hints
  43: rust_analyzer::dispatch::RequestDispatcher::on::{{closure}}::{{closure}}
  44: <F as threadpool::FnBox>::call_box
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Panic context:
> 
version: 996300f4a 2021-08-23 stable
request: textDocument/codeAction CodeActionParams {
    text_document: TextDocumentIdentifier {
        uri: Url {
            scheme: "file",
            cannot_be_a_base: false,
            username: "",
            password: None,
            host: None,
            port: None,
            path: "/home/str4d/dev/rust/zkcrypto/bellman/src/multiexp.rs",
            query: None,
            fragment: None,
        },
    },
    range: Range {
        start: Position {
            line: 15,
            character: 18,
        },
        end: Position {
            line: 15,
            character: 18,
        },
    },
    context: CodeActionContext {
        diagnostics: [],
        only: None,
    },
    work_done_progress_params: WorkDoneProgressParams {
        work_done_token: None,
    },
    partial_result_params: PartialResultParams {
        partial_result_token: None,
    },
}

thread '<unnamed>' panicked at 'index out of bounds: the len is 1 but the index is 1', /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-ir-0.70.0/src/lib.rs:2752:10
stack backtrace:
   0: rust_begin_unwind
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:515:5
   1: core::panicking::panic_fmt
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:92:14
   2: core::panicking::panic_bounds_check
             at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:69:5
   3: <&chalk_ir::SubstFolder<I,A> as chalk_ir::fold::Folder<I>>::fold_free_var_ty
   4: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   5: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::GenericArg<I>>::fold_with
   6: <smallvec::SmallVec<A> as core::iter::traits::collect::Extend<<A as smallvec::Array>::Item>>::extend
   7: chalk_ir::fold::boring_impls::<impl chalk_ir::fold::Fold<I> for chalk_ir::Substitution<I>>::fold_with
   8: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
   9: <chalk_ir::Ty<I> as chalk_ir::fold::SuperFold<I>>::super_fold_with
  10: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  11: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  12: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  13: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_method_call
  14: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  15: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  16: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  17: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  18: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  19: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  20: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  21: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  22: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  23: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  24: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  25: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr
  26: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  27: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  28: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_block
  29: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_inner
  30: hir_ty::infer::expr::<impl hir_ty::infer::InferenceContext>::infer_expr_coerce
  31: hir_ty::infer::infer_query
  32: salsa::runtime::Runtime::execute_query_implementation
  33: salsa::derived::slot::Slot<Q,MP>::read_upgrade
  34: salsa::derived::slot::Slot<Q,MP>::read
  35: <salsa::derived::DerivedStorage<Q,MP> as salsa::plumbing::QueryStorageOps<Q>>::try_fetch
  36: <DB as hir_ty::db::HirDatabase>::infer_query
  37: hir_ty::db::infer_wait
  38: hir::Function::diagnostics
  39: hir::Module::diagnostics
  40: ide_diagnostics::diagnostics
  41: ide::Analysis::assists_with_fixes::{{closure}}
  42: std::panicking::try
  43: rust_analyzer::handlers::handle_code_action
  44: rust_analyzer::dispatch::RequestDispatcher::on::{{closure}}::{{closure}}
  45: <F as threadpool::FnBox>::call_box
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Metadata

Metadata

Assignees

Labels

A-tytype system / type inference / traits / method resolutionBroken WindowBugs / technical debt to be addressed immediatelyS-actionableSomeone could pick this issue up and work on it right now

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions