2 // compile-flags:-Zpolymorphize=on -Zinline-mir=off
3 #![feature(generic_const_exprs, generators, generator_trait, rustc_attrs)]
4 //~^ WARN the feature `generic_const_exprs` is incomplete
6 use std
::marker
::Unpin
;
7 use std
::ops
::{Generator, GeneratorState}
;
10 enum YieldOrReturn
<Y
, R
> {
15 fn finish
<T
, Y
, R
>(mut t
: T
) -> Vec
<YieldOrReturn
<Y
, R
>>
17 T
: Generator
<(), Yield
= Y
, Return
= R
> + Unpin
,
19 let mut results
= Vec
::new();
21 match Pin
::new(&mut t
).resume(()) {
22 GeneratorState
::Yielded(yielded
) => results
.push(YieldOrReturn
::Yield(yielded
)),
23 GeneratorState
::Complete(returned
) => {
24 results
.push(YieldOrReturn
::Return(returned
));
31 // This test checks that the polymorphization analysis functions on generators.
33 #[rustc_polymorphize_error]
34 pub fn unused_type
<T
>() -> impl Generator
<(), Yield
= u32, Return
= u32> + Unpin
{
36 //~^ ERROR item has unused generic parameters
42 #[rustc_polymorphize_error]
43 pub fn used_type_in_yield
<Y
: Default
>() -> impl Generator
<(), Yield
= Y
, Return
= u32> + Unpin
{
50 #[rustc_polymorphize_error]
51 pub fn used_type_in_return
<R
: Default
>() -> impl Generator
<(), Yield
= u32, Return
= R
> + Unpin
{
58 #[rustc_polymorphize_error]
59 pub fn unused_const
<const T
: u32>() -> impl Generator
<(), Yield
= u32, Return
= u32> + Unpin
{
61 //~^ ERROR item has unused generic parameters
67 #[rustc_polymorphize_error]
68 pub fn used_const_in_yield
<const Y
: u32>() -> impl Generator
<(), Yield
= u32, Return
= u32> + Unpin
76 #[rustc_polymorphize_error]
77 pub fn used_const_in_return
<const R
: u32>() -> impl Generator
<(), Yield
= u32, Return
= u32> + Unpin
86 finish(unused_type
::<u32>());
87 finish(used_type_in_yield
::<u32>());
88 finish(used_type_in_return
::<u32>());
89 finish(unused_const
::<1u32>());
90 finish(used_const_in_yield
::<1u32>());
91 finish(used_const_in_return
::<1u32>());