Rollup merge of #88706 - ThePuzzlemaker:issue-88609, r=jackh726
Normalize associated type projections when checking return type of main This fixes #88609. Previously, the return type of `fn main()` would not have any associated type projections within normalized before checking if it implements the standard library trait `std::process::Termination`. This commit appears to fix it. This feels vaguely symptomatic of a problem in the underlying trait solving engine, but I am not sure how I would solve that. I am unsure why the example in #88609 with `assert_impl_termination` and `fn foo()` work, but simply `fn main()` doesn't. The way that I solved this is also probably not the best way to do this, so please let me know if there is a better way to do this. I have added a build-pass regression test for this issue.
This commit is contained in:
commit
960e49e89b
2 changed files with 40 additions and 1 deletions
19
src/test/ui/typeck/issue-88609.rs
Normal file
19
src/test/ui/typeck/issue-88609.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
// Regression test for #88609:
|
||||
// The return type for `main` is not normalized while checking if it implements
|
||||
// the trait `std::process::Termination`.
|
||||
|
||||
// build-pass
|
||||
|
||||
trait Same {
|
||||
type Output;
|
||||
}
|
||||
|
||||
impl<T> Same for T {
|
||||
type Output = T;
|
||||
}
|
||||
|
||||
type Unit = <() as Same>::Output;
|
||||
|
||||
fn main() -> Result<Unit, std::io::Error> {
|
||||
unimplemented!()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue