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:
Matthias Krüger 2022-07-20 18:58:16 +02:00 committed by GitHub
commit 82d9ae9ca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 9 deletions

View File

@ -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>(

View 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() {}

View File

@ -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

View File

@ -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 });
}

View File

@ -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)}