fix assertion failed for break_last_token and trailing token
This commit is contained in:
parent
53728ff751
commit
2414357374
@ -273,16 +273,23 @@ pub fn collect_tokens_trailing_token<R: HasAttrs + HasTokens>(
|
||||
let cursor_snapshot_next_calls = cursor_snapshot.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'
|
||||
match trailing {
|
||||
TrailingToken::None => {}
|
||||
TrailingToken::Gt => {
|
||||
assert_eq!(self.token.kind, token::Gt);
|
||||
}
|
||||
TrailingToken::Semi => {
|
||||
assert_eq!(self.token.kind, token::Semi);
|
||||
end_pos += 1;
|
||||
captured_trailing = true;
|
||||
}
|
||||
TrailingToken::MaybeComma => {
|
||||
if self.token.kind == token::Comma {
|
||||
end_pos += 1;
|
||||
captured_trailing = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -292,11 +299,7 @@ pub fn collect_tokens_trailing_token<R: HasAttrs + HasTokens>(
|
||||
// was not actually bumped past it. When the `LazyAttrTokenStream` gets converted
|
||||
// into an `AttrTokenStream`, we will create the proper token.
|
||||
if self.token_cursor.break_last_token {
|
||||
assert_eq!(
|
||||
trailing,
|
||||
TrailingToken::None,
|
||||
"Cannot set `break_last_token` and have trailing token"
|
||||
);
|
||||
assert!(!captured_trailing, "Cannot set break_last_token and have trailing token");
|
||||
end_pos += 1;
|
||||
}
|
||||
|
||||
|
@ -3080,6 +3080,8 @@ fn collect_tokens_for_expr(
|
||||
&& this.token.kind == token::Semi
|
||||
{
|
||||
TrailingToken::Semi
|
||||
} else if this.token.kind == token::Gt {
|
||||
TrailingToken::Gt
|
||||
} else {
|
||||
// FIXME - pass this through from the place where we know
|
||||
// we need a comma, rather than assuming that `#[attr] expr,`
|
||||
|
@ -79,6 +79,7 @@ pub enum ForceCollect {
|
||||
pub enum TrailingToken {
|
||||
None,
|
||||
Semi,
|
||||
Gt,
|
||||
/// If the trailing token is a comma, then capture it
|
||||
/// Otherwise, ignore the trailing token
|
||||
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…
Reference in New Issue
Block a user