about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-05-23 08:42:09 +0000
committerbors <bors@rust-lang.org>2024-05-23 08:42:09 +0000
commit6e8646df8b46ed376c26b457e1340f2dacb00628 (patch)
tree082b2a44f44c0c11e108a1f9f89dd505df66ea5b /compiler/rustc_codegen_llvm/src
parent68fe34a4c2a5a864ed212ac2b0151ff7a52bab09 (diff)
parent425ed6a181e07abde8d6a722179a953639b34aaf (diff)
downloadrust-6e8646df8b46ed376c26b457e1340f2dacb00628.tar.gz
rust-6e8646df8b46ed376c26b457e1340f2dacb00628.zip
Auto merge of #17174 - Kohei316:fix-infer-async-block-with-tail-return-expr, r=Veykril
Fix: infer type of async block with tail return expr

Fixes #17106
The `infer_async_block` method calls the `infer_block` method internally, which returns the never type without coercion when `tail_expr` is `None` and `ctx.diverges` is `Diverges::Always`.This is the reason for the bug in this issue.
https://github.com/rust-lang/rust-analyzer/blob/cfce2bb46da62950a8b70ddb0b2a12332da1b1e1/crates/hir-ty/src/infer/expr.rs#L1411-L1413

This PR solves the bug by adding a process to coerce after calling `infer_block` method.

This code passes all the tests, including tests I added for this isuue, however, I am not sure if this solution is right. I think that this solution is an ad hoc solution. So, I would appreciate to have your review.
I apologize if I'm off the mark, but `infer_async_block` method should be rewritten to share code with the process of infering type of `expr::Closure` instead of the `infer_block` method. That way it will be closer to the infer process of rustc.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions