Rollup merge of #131522 - c410-f3r:unlock-rfc-2011, r=chenyukang
[macro_metavar_expr_concat] Fix #128346 Fix #128346 Fix #131393 The syntax is invalid in both issues so I guess that theoretically the compiler should have aborted early. This PR tries to fix a local problem but let me know if there are better options. cc `@petrochenkov` if you are interested
This commit is contained in:
commit
b919afa70f
4 changed files with 46 additions and 17 deletions
|
@ -697,8 +697,10 @@ fn transcribe_metavar_expr<'a>(
|
||||||
MetaVarExprConcatElem::Var(ident) => {
|
MetaVarExprConcatElem::Var(ident) => {
|
||||||
match matched_from_ident(dcx, *ident, interp)? {
|
match matched_from_ident(dcx, *ident, interp)? {
|
||||||
NamedMatch::MatchedSeq(named_matches) => {
|
NamedMatch::MatchedSeq(named_matches) => {
|
||||||
let curr_idx = repeats.last().unwrap().0;
|
let Some((curr_idx, _)) = repeats.last() else {
|
||||||
match &named_matches[curr_idx] {
|
return Err(dcx.struct_span_err(sp.entire(), "invalid syntax"));
|
||||||
|
};
|
||||||
|
match &named_matches[*curr_idx] {
|
||||||
// FIXME(c410-f3r) Nested repetitions are unimplemented
|
// FIXME(c410-f3r) Nested repetitions are unimplemented
|
||||||
MatchedSeq(_) => unimplemented!(),
|
MatchedSeq(_) => unimplemented!(),
|
||||||
MatchedSingle(pnr) => {
|
MatchedSingle(pnr) => {
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
//@ known-bug: rust-lang/rust#128346
|
|
||||||
|
|
||||||
macro_rules! one_rep {
|
|
||||||
( $($a:ident)* ) => {
|
|
||||||
A(
|
|
||||||
const ${concat($a, Z)}: i32 = 3;
|
|
||||||
)*
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
one_rep!(A B C);
|
|
||||||
}
|
|
|
@ -1,5 +1,3 @@
|
||||||
//@ run-pass
|
|
||||||
|
|
||||||
#![feature(macro_metavar_expr_concat)]
|
#![feature(macro_metavar_expr_concat)]
|
||||||
|
|
||||||
macro_rules! one_rep {
|
macro_rules! one_rep {
|
||||||
|
@ -10,9 +8,29 @@ macro_rules! one_rep {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! issue_128346 {
|
||||||
|
( $($a:ident)* ) => {
|
||||||
|
A(
|
||||||
|
const ${concat($a, Z)}: i32 = 3;
|
||||||
|
//~^ ERROR invalid syntax
|
||||||
|
)*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! issue_131393 {
|
||||||
|
($t:ident $($en:ident)?) => {
|
||||||
|
read::<${concat($t, $en)}>()
|
||||||
|
//~^ ERROR invalid syntax
|
||||||
|
//~| ERROR invalid syntax
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
one_rep!(A B C);
|
one_rep!(A B C);
|
||||||
assert_eq!(AZ, 3);
|
assert_eq!(AZ, 3);
|
||||||
assert_eq!(BZ, 3);
|
assert_eq!(BZ, 3);
|
||||||
assert_eq!(CZ, 3);
|
assert_eq!(CZ, 3);
|
||||||
|
issue_128346!(A B C);
|
||||||
|
issue_131393!(u8);
|
||||||
|
issue_131393!(u16 le);
|
||||||
}
|
}
|
||||||
|
|
22
tests/ui/macros/macro-metavar-expr-concat/repetitions.stderr
Normal file
22
tests/ui/macros/macro-metavar-expr-concat/repetitions.stderr
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
error: invalid syntax
|
||||||
|
--> $DIR/repetitions.rs:14:20
|
||||||
|
|
|
||||||
|
LL | const ${concat($a, Z)}: i32 = 3;
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: invalid syntax
|
||||||
|
--> $DIR/repetitions.rs:22:17
|
||||||
|
|
|
||||||
|
LL | read::<${concat($t, $en)}>()
|
||||||
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: invalid syntax
|
||||||
|
--> $DIR/repetitions.rs:22:17
|
||||||
|
|
|
||||||
|
LL | read::<${concat($t, $en)}>()
|
||||||
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue