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

highly nested comptimes lead to stackoverflow in type infference #16

Open
lenawanel opened this issue Sep 19, 2023 · 3 comments
Open

highly nested comptimes lead to stackoverflow in type infference #16

lenawanel opened this issue Sep 19, 2023 · 3 comments
Labels
bug Something isn't working

Comments

@lenawanel
Copy link
Contributor

lenawanel commented Sep 19, 2023

input:

a :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}};

backtrace:

    frame #924: 0x0000555555d8145c capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::infer_expr::h9cd22f15f9238cc8(self=0x00007fffffffb340, expr=Idx<hir::body::Expr> @ 0x00007ffffffefc24) at ctx.rs:1270:26
    frame #925: 0x0000555555d82ed0 capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::infer_expr::h9cd22f15f9238cc8(self=0x00007fffffffb340, expr=Idx<hir::body::Expr> @ 0x00007fffffff1f54) at ctx.rs:995:35
    frame #926: 0x0000555555d8145c capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::infer_expr::h9cd22f15f9238cc8(self=0x00007fffffffb340, expr=Idx<hir::body::Expr> @ 0x00007fffffff4284) at ctx.rs:1270:26
    frame #927: 0x0000555555d82ed0 capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::infer_expr::h9cd22f15f9238cc8(self=0x00007fffffffb340, expr=Idx<hir::body::Expr> @ 0x00007fffffff65b4) at ctx.rs:995:35
    frame #928: 0x0000555555d8145c capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::infer_expr::h9cd22f15f9238cc8(self=0x00007fffffffb340, expr=Idx<hir::body::Expr> @ 0x00007fffffff88e4) at ctx.rs:1270:26
    frame #929: 0x0000555555d7b5b6 capy`hir_ty::ctx::_$LT$impl$u20$hir_ty..InferenceCtx$GT$::finish_body_unknown::h8921388941752fac(self=0x00007fffffffb340, body=Idx<hir::body::Expr> @ 0x00007fffffff8ef8, param_tys=Option<alloc::vec::Vec<internment::intern::Intern<hir_ty::resolved_ty::ResolvedTy>, alloc::alloc::Global>> @ 0x00007fffffff9088, global=true) at ctx.rs:108:9
    frame #930: 0x0000555555d86f8a capy`hir_ty::InferenceCtx::get_global_signature::hd58a84c6dcaca7b3(self=0x00007fffffffb340, global=0x00005555560e5648, fqn=Fqn @ 0x00007fffffff8fc0) at lib.rs:318:26
    frame #931: 0x0000555555d86bf8 capy`hir_ty::InferenceCtx::finish::hb9389d4b5c8341c6(self=InferenceCtx @ 0x00007fffffffb340) at lib.rs:271:21
    frame #932: 0x00005555556134a5 capy`capy::compile_file::hec827c3c1a6bf0ed(file_name=PathBuf @ 0x00007fffffffdb60, file_contents=String @ 0x00007fffffffdb80, entry_point=String @ 0x00007fffffffdba0, output=Option<alloc::string::String> @ 0x00007fffffffdbc0, config=CompilationConfig @ 0x00007fffffffdbe0, verbose='\0') at main.rs:264:39
    frame #933: 0x0000555555610e83 capy`capy::main::hafd8494adbfc3be4 at main.rs:112:5
@lenawanel
Copy link
Contributor Author

this is pretty unlikely to happen anywhere without capy having macros, as even sth like:

a   :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a1 } } } } } } } } } } } } } };
a1  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a2 } } } } } } } } } } } } } };
a2  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a3 } } } } } } } } } } } } } };
a3  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a4 } } } } } } } } } } } } } };
a4  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a5 } } } } } } } } } } } } } };
a5  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a6 } } } } } } } } } } } } } };
a6  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a7 } } } } } } } } } } } } } };
a7  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a8 } } } } } } } } } } } } } };
a8  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a9 } } } } } } } } } } } } } };
a9  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a10 } } } } } } } } } } } } } };
a10 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a11 } } } } } } } } } } } } } };
a11 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a12 } } } } } } } } } } } } } };
a12 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a13 } } } } } } } } } } } } } };
a13 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a14 } } } } } } } } } } } } } };
a14 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a15 } } } } } } } } } } } } } };
a15 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a16 } } } } } } } } } } } } } };
a16 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a17 } } } } } } } } } } } } } };
a17 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a18 } } } } } } } } } } } } } };
a18 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a19 } } } } } } } } } } } } } };
a19 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { 20 } } } } } } } } } } } } } };

doesn't overflow. interestingly adding a main function like so:

a   :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a1 } } } } } } } } } } } } } };
a1  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a2 } } } } } } } } } } } } } };
a2  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a3 } } } } } } } } } } } } } };
a3  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a4 } } } } } } } } } } } } } };
a4  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a5 } } } } } } } } } } } } } };
a5  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a6 } } } } } } } } } } } } } };
a6  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a7 } } } } } } } } } } } } } };
a7  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a8 } } } } } } } } } } } } } };
a8  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a9 } } } } } } } } } } } } } };
a9  :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a10 } } } } } } } } } } } } } };
a10 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a11 } } } } } } } } } } } } } };
a11 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a12 } } } } } } } } } } } } } };
a12 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a13 } } } } } } } } } } } } } };
a13 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a14 } } } } } } } } } } } } } };
a14 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a15 } } } } } } } } } } } } } };
a15 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a16 } } } } } } } } } } } } } };
a16 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a17 } } } } } } } } } } } } } };
a17 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a18 } } } } } } } } } } } } } };
a18 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a19 } } } } } } } } } } } } } };
a19 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { 20 } } } } } } } } } } } } } };


main :: () -> i32 {
	a 
}

causes a crash:

thread 'main' panicked at crates/codegen/src/compiler/functions.rs:258:17:
not yet implemented: Oh shit I forgot to account for this possibility
stack backtrace:
   0: rust_begin_unwind
             at /rustc/030e4d382f1df30240408540f25cd1ccc8dbbf50/library/std/src/panicking.rs:619:5
   1: core::panicking::panic_fmt
             at /rustc/030e4d382f1df30240408540f25cd1ccc8dbbf50/library/core/src/panicking.rs:72:14
   2: codegen::compiler::functions::FunctionCompiler::compile_global
             at ./crates/codegen/src/compiler/functions.rs:258:17
   3: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
             at ./crates/codegen/src/compiler/functions.rs:1186:43
   4: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
             at ./crates/codegen/src/compiler/functions.rs:1043:21
   5: codegen::compiler::functions::FunctionCompiler::compile_expr
             at ./crates/codegen/src/compiler/functions.rs:508:9
   6: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
             at ./crates/codegen/src/compiler/functions.rs:1402:21
   7: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
             at ./crates/codegen/src/compiler/functions.rs:1043:21
   8: codegen::compiler::functions::FunctionCompiler::compile_expr
             at ./crates/codegen/src/compiler/functions.rs:508:9
   9: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
             at ./crates/codegen/src/compiler/functions.rs:1402:21
  10: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args

@NotAFlyingGoose
Copy link
Member

This is more of an issue on deeply nested things in general. As long as the codebase is structured in a recursive way, this will be an problem.

This input also causes a crash with type inference.

a {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

Restructuring everything to be iterative might make the entire codebase much cleaner too, but it would also require a huge rewrite of everything. So the fix to this one might not be as fast as the other ones.

@NotAFlyingGoose
Copy link
Member

I just pushed a large change to hir_ty which removed much of the recursion but the input still crashes for some reason. I must have missed something or misdone something.

I'll look into it soon.

@NotAFlyingGoose NotAFlyingGoose added the bug Something isn't working label Jun 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants