Make sure all kinds of generators only return unit
This commit is contained in:
parent
454bff7682
commit
bb33200047
@ -650,9 +650,10 @@ fn supplied_sig_of_closure(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// For a `gen {}` block created as a `gen fn` body, we need the return type to be
|
// All `gen {}` and `async gen {}` must return unit.
|
||||||
// ().
|
Some(hir::CoroutineKind::Gen(_) | hir::CoroutineKind::AsyncGen(_)) => {
|
||||||
Some(hir::CoroutineKind::Gen(hir::CoroutineSource::Fn)) => self.tcx.types.unit,
|
self.tcx.types.unit
|
||||||
|
}
|
||||||
|
|
||||||
_ => astconv.ty_infer(None, decl.output.span()),
|
_ => astconv.ty_infer(None, decl.output.span()),
|
||||||
},
|
},
|
||||||
|
21
tests/ui/coroutine/return-types.rs
Normal file
21
tests/ui/coroutine/return-types.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// compile-flags: --edition 2024 -Zunstable-options
|
||||||
|
|
||||||
|
#![feature(gen_blocks)]
|
||||||
|
|
||||||
|
async gen fn async_gen_fn() -> i32 { 0 }
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
|
||||||
|
gen fn gen_fn() -> i32 { 0 }
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
|
||||||
|
fn async_gen_block() {
|
||||||
|
async gen { yield (); 1 };
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gen_block() {
|
||||||
|
gen { yield (); 1 };
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
31
tests/ui/coroutine/return-types.stderr
Normal file
31
tests/ui/coroutine/return-types.stderr
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/return-types.rs:5:38
|
||||||
|
|
|
||||||
|
LL | async gen fn async_gen_fn() -> i32 { 0 }
|
||||||
|
| --- ^ expected `()`, found integer
|
||||||
|
| |
|
||||||
|
| expected `()` because of return type
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/return-types.rs:8:26
|
||||||
|
|
|
||||||
|
LL | gen fn gen_fn() -> i32 { 0 }
|
||||||
|
| --- ^ expected `()`, found integer
|
||||||
|
| |
|
||||||
|
| expected `()` because of return type
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/return-types.rs:12:27
|
||||||
|
|
|
||||||
|
LL | async gen { yield (); 1 };
|
||||||
|
| ^ expected `()`, found integer
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/return-types.rs:17:21
|
||||||
|
|
|
||||||
|
LL | gen { yield (); 1 };
|
||||||
|
| ^ expected `()`, found integer
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue
Block a user