Rollup merge of #103333 - chenyukang:yukang/fix-103143, r=wesleywiser
Fix assertion failed for break_last_token and trailing token Fixes #103143
This commit is contained in:
commit
11d11e3415
5 changed files with 36 additions and 5 deletions
|
@ -273,16 +273,23 @@ impl<'a> Parser<'a> {
|
||||||
let cursor_snapshot_next_calls = cursor_snapshot.num_next_calls;
|
let cursor_snapshot_next_calls = cursor_snapshot.num_next_calls;
|
||||||
let mut end_pos = self.token_cursor.num_next_calls;
|
let mut end_pos = self.token_cursor.num_next_calls;
|
||||||
|
|
||||||
|
let mut captured_trailing = false;
|
||||||
|
|
||||||
// Capture a trailing token if requested by the callback 'f'
|
// Capture a trailing token if requested by the callback 'f'
|
||||||
match trailing {
|
match trailing {
|
||||||
TrailingToken::None => {}
|
TrailingToken::None => {}
|
||||||
|
TrailingToken::Gt => {
|
||||||
|
assert_eq!(self.token.kind, token::Gt);
|
||||||
|
}
|
||||||
TrailingToken::Semi => {
|
TrailingToken::Semi => {
|
||||||
assert_eq!(self.token.kind, token::Semi);
|
assert_eq!(self.token.kind, token::Semi);
|
||||||
end_pos += 1;
|
end_pos += 1;
|
||||||
|
captured_trailing = true;
|
||||||
}
|
}
|
||||||
TrailingToken::MaybeComma => {
|
TrailingToken::MaybeComma => {
|
||||||
if self.token.kind == token::Comma {
|
if self.token.kind == token::Comma {
|
||||||
end_pos += 1;
|
end_pos += 1;
|
||||||
|
captured_trailing = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -292,11 +299,7 @@ impl<'a> Parser<'a> {
|
||||||
// was not actually bumped past it. When the `LazyAttrTokenStream` gets converted
|
// was not actually bumped past it. When the `LazyAttrTokenStream` gets converted
|
||||||
// into an `AttrTokenStream`, we will create the proper token.
|
// into an `AttrTokenStream`, we will create the proper token.
|
||||||
if self.token_cursor.break_last_token {
|
if self.token_cursor.break_last_token {
|
||||||
assert_eq!(
|
assert!(!captured_trailing, "Cannot set break_last_token and have trailing token");
|
||||||
trailing,
|
|
||||||
TrailingToken::None,
|
|
||||||
"Cannot set `break_last_token` and have trailing token"
|
|
||||||
);
|
|
||||||
end_pos += 1;
|
end_pos += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3142,6 +3142,8 @@ impl<'a> Parser<'a> {
|
||||||
&& this.token.kind == token::Semi
|
&& this.token.kind == token::Semi
|
||||||
{
|
{
|
||||||
TrailingToken::Semi
|
TrailingToken::Semi
|
||||||
|
} else if this.token.kind == token::Gt {
|
||||||
|
TrailingToken::Gt
|
||||||
} else {
|
} else {
|
||||||
// FIXME - pass this through from the place where we know
|
// FIXME - pass this through from the place where we know
|
||||||
// we need a comma, rather than assuming that `#[attr] expr,`
|
// we need a comma, rather than assuming that `#[attr] expr,`
|
||||||
|
|
|
@ -79,6 +79,7 @@ pub enum ForceCollect {
|
||||||
pub enum TrailingToken {
|
pub enum TrailingToken {
|
||||||
None,
|
None,
|
||||||
Semi,
|
Semi,
|
||||||
|
Gt,
|
||||||
/// If the trailing token is a comma, then capture it
|
/// If the trailing token is a comma, then capture it
|
||||||
/// Otherwise, ignore the trailing token
|
/// Otherwise, ignore the trailing token
|
||||||
MaybeComma,
|
MaybeComma,
|
||||||
|
|
5
src/test/ui/parser/issue-103143.rs
Normal file
5
src/test/ui/parser/issue-103143.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
fn main() {
|
||||||
|
x::<#[a]y::<z>>
|
||||||
|
//~^ ERROR invalid const generic expression
|
||||||
|
//~| ERROR cannot find value `x` in this scope
|
||||||
|
}
|
20
src/test/ui/parser/issue-103143.stderr
Normal file
20
src/test/ui/parser/issue-103143.stderr
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
error: invalid const generic expression
|
||||||
|
--> $DIR/issue-103143.rs:2:13
|
||||||
|
|
|
||||||
|
LL | x::<#[a]y::<z>>
|
||||||
|
| ^^^^^^
|
||||||
|
|
|
||||||
|
help: expressions must be enclosed in braces to be used as const generic arguments
|
||||||
|
|
|
||||||
|
LL | x::<#[a]{ y::<z> }>
|
||||||
|
| + +
|
||||||
|
|
||||||
|
error[E0425]: cannot find value `x` in this scope
|
||||||
|
--> $DIR/issue-103143.rs:2:5
|
||||||
|
|
|
||||||
|
LL | x::<#[a]y::<z>>
|
||||||
|
| ^ not found in this scope
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0425`.
|
Loading…
Add table
Add a link
Reference in a new issue