rust-analyzer: Chalk panics on tonic

I am on the latest version, it seems related to my issue where the errors cache (likely because it doesn’t complete anyways). I was thinking it may have to do with tonic/prost, but honestly no idea, the code is minimal, 300 lines max across like 5/6 files…

Crates:

actix = "0.11.0-beta.1"
actix-rt = "=2.0.0-beta.2"
chrono = "0.4.19"
derive_more = "0.99.11"
dotenv = "0.15.0"
enumn = "0.1.3"
envy = "0.4.2"
fnv = "1.0.3"
futures = "0.3.12"
futures-util = "0.3.12"
jsonwebtoken = "7.2.0"
lazy_static = "1.4.0"
num_cpus = "1.13.0"
percent-encoding = "2.1.0"
prost = "0.7"
rand = "0.8.3"
rustls = "0.19.0"
serde = {version = "1.0.123", features = ["derive"]}
serde_json = "1.0.62"
slog = "2.7.0"
slog-async = "2.6.0"
slog-bunyan = "2.3.0"
slog-term = "2.6.0"
tonic = "0.4.0"

[build-dependencies]
tonic-build = {version = "0.4.0", features = ["prost"]}
thread '<unnamed>' panicked at 'overflow depth reached', /Users/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-recursive-0.58.0/src/stack.rs:51:13
stack backtrace:
   0: std::panicking::begin_panic
   1: chalk_recursive::stack::Stack::push
   2: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
   3: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
   4: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
   5: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
   6: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
   7: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
   8: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
   9: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  10: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  11: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  12: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  13: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  14: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  15: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  16: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  17: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  18: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  19: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  20: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  21: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  22: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  23: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  24: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  25: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  26: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  27: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  28: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  29: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  30: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  31: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  32: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  33: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  34: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  35: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  36: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  37: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  38: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  39: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  40: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  41: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  42: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  43: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  44: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  45: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  46: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  47: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  48: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  49: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  50: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  51: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  52: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  53: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  54: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  55: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  56: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  57: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  58: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  59: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  60: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  61: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  62: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  63: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  64: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  65: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  66: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  67: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  68: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  69: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  70: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  71: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  72: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  73: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  74: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  75: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  76: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  77: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  78: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  79: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  80: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  81: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  82: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  83: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  84: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  85: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  86: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  87: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  88: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  89: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  90: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread '<unnamed>' panicked at 'overflow depth reached', /Users/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-recursive-0.58.0/src/stack.rs:51:13
stack backtrace:
   0: std::panicking::begin_panic
   1: chalk_recursive::stack::Stack::push
   2: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
   3: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
   4: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
   5: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
   6: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
   7: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
   8: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
   9: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  10: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  11: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  12: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  13: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  14: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  15: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  16: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  17: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  18: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  19: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  20: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  21: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  22: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  23: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  24: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  25: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  26: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  27: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  28: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  29: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  30: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  31: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  32: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  33: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  34: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  35: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  36: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  37: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  38: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  39: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  40: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  41: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  42: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  43: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  44: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  45: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  46: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  47: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  48: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  49: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  50: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  51: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  52: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  53: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  54: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  55: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  56: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  57: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  58: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  59: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  60: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  61: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  62: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  63: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  64: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  65: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  66: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  67: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  68: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  69: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  70: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  71: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  72: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  73: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  74: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  75: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  76: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  77: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  78: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  79: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  80: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  81: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  82: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  83: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  84: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  85: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  86: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
  87: chalk_recursive::fulfill::Fulfill<I,Solver>::prove
  88: chalk_recursive::fulfill::Fulfill<I,Solver>::solve
  89: chalk_recursive::recursive::Solver<I>::solve_new_subgoal
  90: <chalk_recursive::recursive::Solver<I> as chalk_recursive::solve::SolveDatabase<I>>::solve_goal
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 1
  • Comments: 15 (8 by maintainers)

Commits related to this issue

Most upvoted comments

I can’t reproduce the crash with the commit @lnicola referenced, though we’re still very slow in analyzing it.

I can reproduce it in tonic at 61555ff2b5b76e4e3172717354aed1e6f31d6611 with rust-analyzer analysis-stats . -o client::grpc::ready.

Min project that literally just has tonic/prost as deps: https://github.com/dtzxporter/crash-rls-chalk

rust-analyzer analysis-stats --with-deps will cause the crash.

Same spot, client::grpc::ready is within tonic’s main repository