Change:
<ins> error[E0308]: mismatched types --> $DIR/issue-102605.rs:13:20 | LL |     convert_result(foo()) |     -------------- ^^^^^ expected enum `Result`, found opaque type |     | |     arguments to this function are incorrect | note: while checking the return type of the `async fn` --> $DIR/issue-102605.rs:3:19 | LL | async fn foo() -> Result<(), String> { |                   ^^^^^^^^^^^^^^^^^^ checked the `Output` of this `async fn`, found opaque type = note:     expected enum `Result<(), _>` found opaque type `impl Future<Output = Result<(), String>>` note: function defined here --> $DIR/issue-102605.rs:7:4 | LL | fn convert_result<T, E>(r: Result<T, E>) -> Option<T> { |    ^^^^^^^^^^^^^^       --------------- help: consider `await`ing on the `Future` | LL |     convert_result(foo().await) |                         ++++++ help: try wrapping the expression in `Err` | LL |     convert_result(Err(foo())) |                    ++++     + error[E0277]: `main` has invalid return type `Option<()>` --> $DIR/issue-102605.rs:11:14 | LL | fn main() -> Option<()> { |              ^^^^^^^^^^ `main` can only return types that implement `Termination` | = help: consider using `()`, or a `Result` error: aborting due to 2 previous errors Some errors have detailed explanations: E0277, E0308. For more information about an error, try `rustc --explain E0277`. </ins>

Discussion:
<!-- Thank you for finding an Internal Compiler Error! If possible, try to provide a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for how to create smaller examples. --Still working out how to get rid of this and find a minimal replicating code example. The backtrace however, contains some useful information like "index out of bounds", for those who knows the implementation of the compiler. I guess it should be a good clue to find out what makes it wrong. <!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --: <!-- Include a backtrace in the code block by setting in your environment. E.g. . --<details<summary<strongBacktrace</strong</summary<p</p</details<!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
Can you check if this is fixed on nightly?
Running the nightly channel on the same code reports a type error that linked to a change I made in the code that making a function returning to an but forgot to change the calling site to use .
Ok, according the clue above I found a minimal code example The above code should not compile; but instead of reporting errors it crashes the compiler. Seems only affects the stable channel; beta and nightly are working properly. (The example code can be rewritten as or something like that and it will report the error correctly; however the real code was converting to instead of so it does not help)
So this is fixed by -- unfortunately that's going to land in the next release cycle (1.65) and this isn't a critical enough ICE to warrant a patch release for 1.64
can we add the repro to the test suite and close the ticket then?
claim To add the test if it's not already done.
Please do!