pub fn fully_expand_fragment(&mut self, input_fragment: AstFragment) -> AstFragment {
let orig_expansion_data = self.cx.current_expansion.clone();
let orig_force_mode = self.cx.force_mode;
- self.cx.current_expansion.depth = 0;
// Collect all macro invocations and replace them with placeholders.
let (mut fragment_with_placeholders, mut invocations) =
};
let ExpansionData { depth, id: expn_id, .. } = invoc.expansion_data;
+ let depth = depth - orig_expansion_data.depth;
self.cx.current_expansion = invoc.expansion_data.clone();
self.cx.force_mode = force;
--- /dev/null
+// Regression test for #84632: Recursion limit is ignored
+// for builtin macros that eagerly expands.
+
+#![recursion_limit = "15"]
+macro_rules! a {
+ () => ("");
+ (A) => (concat!("", a!()));
+ (A, $($A:ident),*) => (concat!("", a!($($A),*)))
+ //~^ ERROR recursion limit reached
+ //~| HELP consider adding
+}
+
+fn main() {
+ a!(A, A, A, A, A);
+ a!(A, A, A, A, A, A, A, A, A, A, A);
+}
--- /dev/null
+error: recursion limit reached while expanding `concat!`
+ --> $DIR/issue-84632-eager-expansion-recursion-limit.rs:8:28
+ |
+LL | (A, $($A:ident),*) => (concat!("", a!($($A),*)))
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | a!(A, A, A, A, A, A, A, A, A, A, A);
+ | ------------------------------------ in this macro invocation
+ |
+ = help: consider adding a `#![recursion_limit="30"]` attribute to your crate (`issue_84632_eager_expansion_recursion_limit`)
+ = note: this error originates in the macro `a` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+