better error for bad depth on macro metavar expr
This commit is contained in:
parent
a289cfcfb3
commit
dd109c8c10
5 changed files with 39 additions and 9 deletions
|
@ -512,7 +512,18 @@ fn out_of_bounds_err<'a>(
|
|||
span: Span,
|
||||
ty: &str,
|
||||
) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
|
||||
cx.struct_span_err(span, &format!("{ty} depth must be less than {max}"))
|
||||
let msg = if max == 0 {
|
||||
format!(
|
||||
"meta-variable expression `{ty}` with depth parameter \
|
||||
must be called inside of a macro repetition"
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"depth parameter on meta-variable expression `{ty}` \
|
||||
must be less than {max}"
|
||||
)
|
||||
};
|
||||
cx.struct_span_err(span, &msg)
|
||||
}
|
||||
|
||||
fn transcribe_metavar_expr<'a>(
|
||||
|
|
12
src/test/ui/macros/meta-variable-depth-outside-repeat.rs
Normal file
12
src/test/ui/macros/meta-variable-depth-outside-repeat.rs
Normal file
|
@ -0,0 +1,12 @@
|
|||
#![feature(macro_metavar_expr)]
|
||||
|
||||
macro_rules! metavar {
|
||||
( $i:expr ) => {
|
||||
${length(0)}
|
||||
//~^ ERROR meta-variable expression `length` with depth parameter must be called inside of a macro repetition
|
||||
};
|
||||
}
|
||||
|
||||
const _: i32 = metavar!(0);
|
||||
|
||||
fn main() {}
|
|
@ -0,0 +1,8 @@
|
|||
error: meta-variable expression `length` with depth parameter must be called inside of a macro repetition
|
||||
--> $DIR/meta-variable-depth-outside-repeat.rs:5:10
|
||||
|
|
||||
LL | ${length(0)}
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -5,7 +5,7 @@ macro_rules! a {
|
|||
(
|
||||
${count(foo, 0)},
|
||||
${count(foo, 10)},
|
||||
//~^ ERROR count depth must be less than 4
|
||||
//~^ ERROR depth parameter on meta-variable expression `count` must be less than 4
|
||||
)
|
||||
};
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ macro_rules! b {
|
|||
${ignore(foo)}
|
||||
${index(0)},
|
||||
${index(10)},
|
||||
//~^ ERROR index depth must be less than 3
|
||||
//~^ ERROR depth parameter on meta-variable expression `index` must be less than 3
|
||||
)* )* )*
|
||||
)
|
||||
};
|
||||
|
@ -30,15 +30,14 @@ macro_rules! c {
|
|||
${ignore(foo)}
|
||||
${length(0)}
|
||||
${length(10)}
|
||||
//~^ ERROR length depth must be less than 2
|
||||
//~^ ERROR depth parameter on meta-variable expression `length` must be less than 2
|
||||
)* )*
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
a!( { [ (a) ] [ (b c) ] } );
|
||||
b!( { [ a b ] } );
|
||||
c!( { a } );
|
||||
c!({ a });
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
error: count depth must be less than 4
|
||||
error: depth parameter on meta-variable expression `count` must be less than 4
|
||||
--> $DIR/out-of-bounds-arguments.rs:7:14
|
||||
|
|
||||
LL | ${count(foo, 10)},
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: index depth must be less than 3
|
||||
error: depth parameter on meta-variable expression `index` must be less than 3
|
||||
--> $DIR/out-of-bounds-arguments.rs:19:18
|
||||
|
|
||||
LL | ${index(10)},
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: length depth must be less than 2
|
||||
error: depth parameter on meta-variable expression `length` must be less than 2
|
||||
--> $DIR/out-of-bounds-arguments.rs:32:18
|
||||
|
|
||||
LL | ${length(10)}
|
||||
|
|
Loading…
Add table
Reference in a new issue