Rollup merge of #99355 - compiler-errors:macro-metavar-less-than-zero, r=petrochenkov
better error for bad depth parameter on macro metavar expr Fixes #99060
This commit is contained in:
commit
82d9ae9ca1
@ -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…
x
Reference in New Issue
Block a user