roc
roc copied to clipboard
Infinite recursion when using a Tree type containing a List Tree
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.