Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/mbe/src/expander/transcriber.rs')
-rw-r--r--crates/mbe/src/expander/transcriber.rs5
1 files changed, 5 insertions, 0 deletions
diff --git a/crates/mbe/src/expander/transcriber.rs b/crates/mbe/src/expander/transcriber.rs
index acab989437..7710ea7938 100644
--- a/crates/mbe/src/expander/transcriber.rs
+++ b/crates/mbe/src/expander/transcriber.rs
@@ -448,6 +448,7 @@ fn expand_repeat(
let mut counter = 0;
let mut err = None;
+ let initial_restore_point = builder.restore_point();
let mut restore_point = builder.restore_point();
loop {
let ExpandResult { value: (), err: e } =
@@ -465,6 +466,10 @@ fn expand_repeat(
counter += 1;
if counter == limit {
+ // FIXME: This is a bug here, we get here when we shouldn't, see https://github.com/rust-lang/rust-analyzer/issues/18910.
+ // If we don't restore we emit a lot of nodes which causes a stack overflow down the road. For now just ignore them,
+ // there is always an error here anyway.
+ builder.restore(initial_restore_point);
err = Some(ExpandError::new(ctx.call_site, ExpandErrorKind::LimitExceeded));
break;
}