1
Fork 0

Rollup merge of #128082 - compiler-errors:closure-cap, r=estebank

Note closure captures when reporting cast to fn ptr failed

Fixes #128078

We already had logic to point out a closure having captures when that's possibly the source of a coercion error to `fn()`, but we weren't reporting it during an explicit `as` cast.
This commit is contained in:
Matthias Krüger 2024-07-23 19:42:37 +02:00 committed by GitHub
commit c2ba4b1cb0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 0 deletions

View file

@ -495,6 +495,7 @@ impl<'a, 'tcx> CastCheck<'tcx> {
err.span_label(self.span, "invalid cast"); err.span_label(self.span, "invalid cast");
} }
fcx.suggest_no_capture_closure(&mut err, self.cast_ty, self.expr_ty);
self.try_suggest_collection_to_bool(fcx, &mut err); self.try_suggest_collection_to_bool(fcx, &mut err);
err.emit(); err.emit();

View file

@ -3,6 +3,12 @@ error[E0605]: non-primitive cast: `{closure@$DIR/closure-no-fn-3.rs:6:28: 6:30}`
| |
LL | let baz: fn() -> u8 = (|| { b }) as fn() -> u8; LL | let baz: fn() -> u8 = (|| { b }) as fn() -> u8;
| ^^^^^^^^^^^^^^^^^^^^^^^^ invalid cast | ^^^^^^^^^^^^^^^^^^^^^^^^ invalid cast
|
note: closures can only be coerced to `fn` types if they do not capture any variables
--> $DIR/closure-no-fn-3.rs:6:33
|
LL | let baz: fn() -> u8 = (|| { b }) as fn() -> u8;
| ^ `b` captured here
error: aborting due to 1 previous error error: aborting due to 1 previous error