roc icon indicating copy to clipboard operation
roc copied to clipboard

Infinite recursion when using a Tree type containing a List Tree

Open ageron opened this issue 1 year ago • 0 comments

Working on some code with a recursive Tree type, the compiler crashes with the following error message (see below for the full stacktrace):

thread 'main' panicked at crates/compiler/load_internal/src/file.rs:685:26:
way too many specialization passes!

Following a discussion with @bhansconnect on Zulip, he reproduced the issue with this much simpler code:

app [main] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.15.0/SlwdbJ-3GR7uBWQo6zlmYWNYOxnvo8r6YABXD-45UOw.tar.br" }

import pf.Stdout

Tree : [Empty, Node { label : Str, children : Set Tree }]

main =
    x : Tree
    x = Node { label: "a", children: Set.fromList [] }

    Inspect.toStr x
        |> Stdout.line!

Stacktrace

RUST_BACKTRACE=1 ~/dev/software/roc/target/debug/roc run test-bug.roc
thread 'main' panicked at crates/compiler/load_internal/src/file.rs:685:26:
way too many specialization passes!
stack backtrace:
   0: rust_begin_unwind
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:647:5
   1: core::panicking::panic_fmt
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panicking.rs:72:14
   2: core::panicking::panic_display
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panicking.rs:196:5
   3: core::panicking::panic_str
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panicking.rs:171:5
   4: core::option::expect_failed
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/option.rs:1988:5
   5: expect<u8>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/option.rs:894:21
   6: inc
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:684:21
   7: update
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:2967:21
   8: state_thread_step
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:1707:37
   9: {closure#1}
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:2054:23
  10: {closure#0}<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>
             at /Users/ageron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crossbeam-utils-0.8.16/src/thread.rs:163:65
  11: call_once<core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>, crossbeam_utils::thread::scope::{closure_env#0}<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panic/unwind_safe.rs:272:9
  12: do_call<core::panic::unwind_safe::AssertUnwindSafe<crossbeam_utils::thread::scope::{closure_env#0}<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>>, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:554:40
  13: ___rust_try
  14: try<core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>, core::panic::unwind_safe::AssertUnwindSafe<crossbeam_utils::thread::scope::{closure_env#0}<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:518:19
  15: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<crossbeam_utils::thread::scope::{closure_env#0}<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>>, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panic.rs:142:14
  16: scope<roc_load_internal::file::load_multi_threaded::{closure_env#1}, core::result::Result<roc_load_internal::file::LoadResult, roc_load_internal::file::LoadingProblem>>
             at /Users/ageron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crossbeam-utils-0.8.16/src/thread.rs:163:18
  17: load_multi_threaded
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:1987:29
  18: load
             at /Users/ageron/dev/software/roc/crates/compiler/load_internal/src/file.rs:1494:35
  19: load
             at /Users/ageron/dev/software/roc/crates/compiler/load/src/lib.rs:39:5
  20: load_and_monomorphize
             at /Users/ageron/dev/software/roc/crates/compiler/load/src/lib.rs:143:11
  21: build_file
             at /Users/ageron/dev/software/roc/crates/compiler/build/src/program.rs:726:18
  22: build
             at /Users/ageron/dev/software/roc/crates/cli/src/lib.rs:920:27
  23: main
             at /Users/ageron/dev/software/roc/crates/cli/src/main.rs:64:17
  24: call_once<fn() -> core::result::Result<(), std::io::error::Error>, ()>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

ageron avatar Sep 20 '24 04:09 ageron