mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
parent
ff6cf4f849
commit
d47834ee1b
2 changed files with 29 additions and 0 deletions
|
@ -717,6 +717,11 @@ impl DefCollector<'_> {
|
|||
macro_call_id: MacroCallId,
|
||||
depth: usize,
|
||||
) {
|
||||
if depth > 100 {
|
||||
mark::hit!(macro_expansion_overflow);
|
||||
log::warn!("macro expansion is too deep");
|
||||
return;
|
||||
}
|
||||
let file_id: HirFileId = macro_call_id.as_file();
|
||||
let item_tree = self.db.item_tree(file_id);
|
||||
let mod_dir = self.mod_dirs[&module_id].clone();
|
||||
|
|
|
@ -660,3 +660,27 @@ fn expand_multiple_derive() {
|
|||
);
|
||||
assert_eq!(map.modules[map.root].scope.impls().len(), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn macro_expansion_overflow() {
|
||||
mark::check!(macro_expansion_overflow);
|
||||
compute_crate_def_map(
|
||||
"
|
||||
macro_rules! a {
|
||||
($e:expr; $($t:tt)*) => {
|
||||
b!($($t)*);
|
||||
};
|
||||
() => {};
|
||||
}
|
||||
|
||||
macro_rules! b {
|
||||
(static = $e:expr; $($t:tt)*) => {
|
||||
a!($e; $($t)*);
|
||||
};
|
||||
() => {};
|
||||
}
|
||||
|
||||
b! { static = #[] (); }
|
||||
",
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue