Instrument rename small-stack phases for crash diagnosis

This commit is contained in:
2026-09-24 16:21:09 -07:00
parent 9388fcf2f0
commit 9e8e77e1d8
@@ -478,9 +478,16 @@ fn combined_shrink_offsets_typed_growth_and_counts_untouched_files() {
}
#[test]
fn deep_and_wide_equality_and_late_refusal_drop_on_small_stack() {
fn phase(message: &str) {
use std::io::Write;
let mut stderr = std::io::stderr().lock();
writeln!(stderr, "rename small-stack: {message}").unwrap();
stderr.flush().unwrap();
}
std::thread::Builder::new()
.stack_size(128 * 1024)
.spawn(|| {
phase("entered worker");
for (expression, result, nodes) in [
(
format!("{}1{}", "abs(".repeat(127), ")".repeat(127)),
@@ -497,16 +504,30 @@ fn deep_and_wide_equality_and_late_refusal_drop_on_small_stack() {
"calculation c \"C\" id \"{}\" {{ result {result}; body {expression}; }}",
id(2)
));
phase(if nodes == 128 {
"deep: before authored"
} else {
"wide: before authored"
});
let source = authored(&bundle);
phase("after authored; before original clone");
assert_eq!(source.indexed.resolved.expressions.len(), nodes);
let original = source.project().clone();
drop(source.plan_rename(&original).unwrap());
phase("after original clone; before plan");
let plan = source.plan_rename(&original).unwrap();
phase("after plan; before plan drop");
drop(plan);
phase("after plan drop; before desired clone");
let mut desired = original.clone();
desired.definitions.get_mut(&id(2)).unwrap().alias = "p".into();
phase("before collision rejection");
rejected(&bundle, &desired, "collide");
phase("after collision rejection; before second desired clone");
let mut desired = original.clone();
calculation(&mut desired, 2).body = a::Binding::Unbound;
phase("before semantic rejection");
rejected(&bundle, &desired, "non-name");
phase("after semantic rejection; before iteration drop");
}
})
.unwrap()