fix: Overlapping spans in delimited meta-vars

This commit is contained in:
EliseZeroTwo 2023-12-13 18:46:03 -07:00
parent 503e129328
commit 770013d315
No known key found for this signature in database
GPG Key ID: FA8F56FFFE6E8B3E
3 changed files with 70 additions and 0 deletions

View File

@ -236,6 +236,13 @@ fn expand_macro<'cx>(
target_sp.open = source_sp.open.with_ctxt(ctxt);
target_sp.close = source_sp.close.with_ctxt(ctxt);
}
(
TokenTree::Delimited(target_sp, ..),
mbe::TokenTree::MetaVar(source_sp, ..),
) => {
target_sp.open = source_sp.with_ctxt(ctxt);
target_sp.close = source_sp.with_ctxt(ctxt).shrink_to_hi();
}
_ => {
let sp = rhs_tt.span().with_ctxt(ctxt);
tt.set_span(sp);

View File

@ -0,0 +1,16 @@
// compile-flags: --crate-type lib -O -C debug-assertions=yes
// Regression test for issue 118786
macro_rules! make_macro {
($macro_name:tt) => {
macro_rules! $macro_name {
//~^ ERROR macros that expand to items must be delimited with braces or followed by a semicolon
//~| ERROR macro expansion ignores token `{` and any following
//~| ERROR cannot find macro `macro_rules` in this scope
() => {}
}
}
}
make_macro!((meow));

View File

@ -0,0 +1,47 @@
error: macros that expand to items must be delimited with braces or followed by a semicolon
--> $DIR/issue-118786.rs:7:22
|
LL | macro_rules! $macro_name {
| ^^^^^^^^^^^
|
help: change the delimiters to curly braces
|
LL | macro_rules! {} {
| ~ +
help: add a semicolon
|
LL | macro_rules! $macro_name; {
| +
error: macro expansion ignores token `{` and any following
--> $DIR/issue-118786.rs:7:34
|
LL | macro_rules! $macro_name {
| ^
...
LL | make_macro!((meow));
| ------------------- caused by the macro expansion here
|
= note: the usage of `make_macro!` is likely invalid in item context
error: cannot find macro `macro_rules` in this scope
--> $DIR/issue-118786.rs:7:9
|
LL | macro_rules! $macro_name {
| ^^^^^^^^^^^
...
LL | make_macro!((meow));
| ------------------- in this macro invocation
|
note: maybe you have forgotten to define a name for this `macro_rules!`
--> $DIR/issue-118786.rs:7:9
|
LL | macro_rules! $macro_name {
| ^^^^^^^^^^^
...
LL | make_macro!((meow));
| ------------------- in this macro invocation
= note: this error originates in the macro `make_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 3 previous errors