Rollup merge of #144589 - compiler-errors:postfix-yield-after-cast, r=petrochenkov

Account for `.yield` in illegal postfix operator message

Fixes rust-lang/rust#144527
This commit is contained in:
Stuart Cook
2025-07-29 23:50:37 +10:00
committed by GitHub
3 changed files with 28 additions and 1 deletions

View File

@@ -785,9 +785,13 @@ impl<'a> Parser<'a> {
ExprKind::Call(_, _) => "a function call", ExprKind::Call(_, _) => "a function call",
ExprKind::Await(_, _) => "`.await`", ExprKind::Await(_, _) => "`.await`",
ExprKind::Use(_, _) => "`.use`", ExprKind::Use(_, _) => "`.use`",
ExprKind::Yield(YieldKind::Postfix(_)) => "`.yield`",
ExprKind::Match(_, _, MatchKind::Postfix) => "a postfix match", ExprKind::Match(_, _, MatchKind::Postfix) => "a postfix match",
ExprKind::Err(_) => return Ok(with_postfix), ExprKind::Err(_) => return Ok(with_postfix),
_ => unreachable!("parse_dot_or_call_expr_with_ shouldn't produce this"), _ => unreachable!(
"did not expect {:?} as an illegal postfix operator following cast",
with_postfix.kind
),
} }
); );
let mut err = self.dcx().struct_span_err(span, msg); let mut err = self.dcx().struct_span_err(span, msg);

View File

@@ -0,0 +1,10 @@
// Regression test for <https://github.com/rust-lang/rust/issues/144527>.
#![feature(yield_expr, coroutines)]
fn main() {
#[coroutine] || {
0 as u8.yield
//~^ ERROR cast cannot be followed by `.yield`
};
}

View File

@@ -0,0 +1,13 @@
error: cast cannot be followed by `.yield`
--> $DIR/postfix-yield-after-cast.rs:7:9
|
LL | 0 as u8.yield
| ^^^^^^^
|
help: try surrounding the expression in parentheses
|
LL | (0 as u8).yield
| + +
error: aborting due to 1 previous error