diff --git a/crates/compiler/test_mono/src/tests.rs b/crates/compiler/test_mono/src/tests.rs index fe2097c502..86385b96fe 100644 --- a/crates/compiler/test_mono/src/tests.rs +++ b/crates/compiler/test_mono/src/tests.rs @@ -1854,8 +1854,7 @@ fn instantiate_annotated_as_recursive_alias_multiple_polymorphic_expr() { ) } -#[mono_test] -#[cfg(not(debug_assertions))] +#[mono_test(large_stack = "true")] fn encode_derived_record_one_field_string() { indoc!( r#" @@ -1872,8 +1871,7 @@ fn encode_derived_record_one_field_string() { ) } -#[mono_test] -#[cfg(not(debug_assertions))] +#[mono_test(large_stack = "true")] fn encode_derived_record_two_field_strings() { indoc!( r#" @@ -1890,8 +1888,7 @@ fn encode_derived_record_two_field_strings() { ) } -#[mono_test] -#[cfg(not(debug_assertions))] +#[mono_test(large_stack = "true")] fn encode_derived_nested_record_string() { indoc!( r#" diff --git a/crates/compiler/test_mono_macros/src/lib.rs b/crates/compiler/test_mono_macros/src/lib.rs index 49114cd200..a9f1d6cb05 100644 --- a/crates/compiler/test_mono_macros/src/lib.rs +++ b/crates/compiler/test_mono_macros/src/lib.rs @@ -9,6 +9,7 @@ pub fn mono_test(args: TokenStream, item: TokenStream) -> TokenStream { let mut no_check = false; let mut allow_type_errors = false; let mut mode = "exec".to_owned(); + let mut large_stack = false; for arg in syn::parse_macro_input!(args as syn::AttributeArgs) { use syn::{Lit, Meta, MetaNameValue, NestedMeta}; if let NestedMeta::Meta(Meta::NameValue(MetaNameValue { @@ -26,6 +27,9 @@ pub fn mono_test(args: TokenStream, item: TokenStream) -> TokenStream { if path.is_ident("allow_type_errors") { allow_type_errors = true; } + if path.is_ident("large_stack") { + large_stack = true; + } } } @@ -44,8 +48,11 @@ pub fn mono_test(args: TokenStream, item: TokenStream) -> TokenStream { #[test] #(#attributes)* #visibility fn #name(#args) { - compiles_to_ir(#name_str, #body, &#mode, #allow_type_errors, #no_check); - + if #large_stack { + with_larger_debug_stack(|| compiles_to_ir(#name_str, #body, &#mode, #allow_type_errors, #no_check)); + } else { + compiles_to_ir(#name_str, #body, &#mode, #allow_type_errors, #no_check); + } } }; result.into()