fix: Overlapping spans in delimited meta-vars
This commit is contained in:
parent
503e129328
commit
770013d315
3 changed files with 70 additions and 0 deletions
|
@ -236,6 +236,13 @@ fn expand_macro<'cx>(
|
||||||
target_sp.open = source_sp.open.with_ctxt(ctxt);
|
target_sp.open = source_sp.open.with_ctxt(ctxt);
|
||||||
target_sp.close = source_sp.close.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);
|
let sp = rhs_tt.span().with_ctxt(ctxt);
|
||||||
tt.set_span(sp);
|
tt.set_span(sp);
|
||||||
|
|
16
tests/ui/macros/issue-118786.rs
Normal file
16
tests/ui/macros/issue-118786.rs
Normal 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));
|
47
tests/ui/macros/issue-118786.stderr
Normal file
47
tests/ui/macros/issue-118786.stderr
Normal 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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue