7136: Fixed nested eager macro bug r=edwin0cheng a=edwin0cheng

fixes #7126 

bors r+

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
This commit is contained in:
bors[bot] 2021-01-03 09:58:32 +00:00 committed by GitHub
commit 354c1daedc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 0 deletions

View file

@ -218,6 +218,12 @@ fn eager_macro_recur(
}
};
// check if the whole original sytnax is replaced
// Note that SyntaxRewriter cannot replace the root node itself
if child.syntax() == &original {
return Ok(insert);
}
rewriter.replace(child.syntax(), &insert);
}

View file

@ -570,6 +570,52 @@ fn bar() -> u32 {0}
);
}
#[test]
fn infer_builtin_macros_include_str() {
check_types(
r#"
//- /main.rs
#[rustc_builtin_macro]
macro_rules! include_str {() => {}}
fn main() {
let a = include_str!("foo.rs");
a;
} //^ &str
//- /foo.rs
hello
"#,
);
}
#[test]
fn infer_builtin_macros_include_str_with_lazy_nested() {
check_types(
r#"
//- /main.rs
#[rustc_builtin_macro]
macro_rules! concat {() => {}}
#[rustc_builtin_macro]
macro_rules! include_str {() => {}}
macro_rules! m {
($x:expr) => {
concat!("foo", $x)
};
}
fn main() {
let a = include_str!(m!(".rs"));
a;
} //^ &str
//- /foo.rs
hello
"#,
);
}
#[test]
#[ignore]
fn include_accidentally_quadratic() {