Skip to content

Commit 51c75e7

Browse files
committed
Use yield_expr feature for iter_macro tests
1 parent 4072ee3 commit 51c75e7

9 files changed

+18
-29
lines changed

compiler/rustc_ast_passes/src/feature_gate.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -468,11 +468,12 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
468468
for span in spans {
469469
if (!visitor.features.coroutines() && !span.allows_unstable(sym::coroutines))
470470
&& (!visitor.features.gen_blocks() && !span.allows_unstable(sym::gen_blocks))
471+
&& (!visitor.features.yield_expr() && !span.allows_unstable(sym::yield_expr))
471472
{
472473
#[allow(rustc::untranslatable_diagnostic)]
473-
// Don't know which of the two features to include in the
474-
// error message, so I am arbitrarily picking one.
475-
feature_err(&visitor.sess, sym::coroutines, *span, "yield syntax is experimental")
474+
// Emit yield_expr as the error, since that will be sufficient. You can think of it
475+
// as coroutines and gen_blocks imply yield_expr.
476+
feature_err(&visitor.sess, sym::yield_expr, *span, "yield syntax is experimental")
476477
.emit();
477478
}
478479
}

tests/ui/iterators/generator.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//@ run-pass
22

3-
#![feature(iter_macro)]
4-
// FIXME(iter_macro): make `yield` within it legal
5-
#![feature(coroutines)]
3+
#![feature(iter_macro, yield_expr)]
64

75
use std::iter::iter;
86

tests/ui/iterators/generator_args.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//@ run-pass
22

3-
#![feature(iter_macro)]
4-
// FIXME(iter_macro): make `yield` within it legal
5-
#![feature(coroutines)]
3+
#![feature(iter_macro, yield_expr)]
64

75
use std::iter::iter;
86

tests/ui/iterators/generator_capture.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//@ run-pass
22

3-
#![feature(iter_macro)]
4-
// FIXME(iter_macro): make `yield` within it legal
5-
#![feature(coroutines)]
3+
#![feature(iter_macro, yield_expr)]
64

75
use std::iter::iter;
86

tests/ui/iterators/generator_capture_.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//@ run-pass
22

3-
#![feature(iter_macro)]
4-
// FIXME(iter_macro): make `yield` within it legal
5-
#![feature(coroutines)]
3+
#![feature(iter_macro, yield_expr)]
64

75
use std::iter::iter;
86

tests/ui/iterators/generator_capture_fail.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
#![feature(iter_macro)]
2-
// FIXME(iter_macro): make `yield` within it legal
3-
#![feature(coroutines)]
1+
#![feature(iter_macro, yield_expr)]
42

53
use std::iter::iter;
64

tests/ui/iterators/generator_capture_fail.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0597]: `s` does not live long enough
2-
--> $DIR/generator_capture_fail.rs:11:13
2+
--> $DIR/generator_capture_fail.rs:9:13
33
|
44
LL | let i = {
55
| - borrow later stored here

tests/ui/iterators/generator_returned_from_fn.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
#![feature(iter_macro, impl_trait_in_fn_trait_return)]
2-
// FIXME(iter_macro): make `yield` within it legal
3-
#![feature(coroutines)]
1+
#![feature(iter_macro, impl_trait_in_fn_trait_return, yield_expr)]
42

53
use std::iter::iter;
64

tests/ui/iterators/generator_returned_from_fn.stderr

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0515]: cannot return reference to function parameter `a`
2-
--> $DIR/generator_returned_from_fn.rs:26:13
2+
--> $DIR/generator_returned_from_fn.rs:24:13
33
|
44
LL | iter! { || {
55
| _____________^
@@ -11,7 +11,7 @@ LL | | } }
1111
| |_____^ returns a reference to data owned by the current function
1212

1313
error: `gen` closure does not implement `Fn` because it captures state from its environment
14-
--> $DIR/generator_returned_from_fn.rs:35:13
14+
--> $DIR/generator_returned_from_fn.rs:33:13
1515
|
1616
LL | iter! { move || {
1717
| _____________-^^^^^^
@@ -20,15 +20,15 @@ LL | | for x in 5..10 {
2020
LL | | yield x * 2;
2121
LL | | }
2222
LL | | } }
23-
| |_____- return type was inferred to be `{gen closure@$DIR/generator_returned_from_fn.rs:35:13: 35:20}` here
23+
| |_____- return type was inferred to be `{gen closure@$DIR/generator_returned_from_fn.rs:33:13: 33:20}` here
2424

2525
error[E0700]: hidden type for `impl FnOnce() -> impl Iterator<Item = u32>` captures lifetime that does not appear in bounds
26-
--> $DIR/generator_returned_from_fn.rs:44:13
26+
--> $DIR/generator_returned_from_fn.rs:42:13
2727
|
2828
LL | fn capture_move_once(a: &u32) -> impl FnOnce() -> impl Iterator<Item = u32> {
2929
| ---- ------------------------------------------ opaque type defined here
3030
| |
31-
| hidden type `{gen closure@$DIR/generator_returned_from_fn.rs:44:13: 44:20}` captures the anonymous lifetime defined here
31+
| hidden type `{gen closure@$DIR/generator_returned_from_fn.rs:42:13: 42:20}` captures the anonymous lifetime defined here
3232
LL | iter! { move || {
3333
| _____________^
3434
LL | |
@@ -44,12 +44,12 @@ LL | fn capture_move_once(a: &u32) -> impl FnOnce() -> impl Iterator<Item = u32>
4444
| +++++++++
4545

4646
error[E0700]: hidden type for `impl Iterator<Item = u32>` captures lifetime that does not appear in bounds
47-
--> $DIR/generator_returned_from_fn.rs:44:13
47+
--> $DIR/generator_returned_from_fn.rs:42:13
4848
|
4949
LL | fn capture_move_once(a: &u32) -> impl FnOnce() -> impl Iterator<Item = u32> {
5050
| ---- ------------------------- opaque type defined here
5151
| |
52-
| hidden type `{gen closure body@$DIR/generator_returned_from_fn.rs:44:21: 51:6}` captures the anonymous lifetime defined here
52+
| hidden type `{gen closure body@$DIR/generator_returned_from_fn.rs:42:21: 49:6}` captures the anonymous lifetime defined here
5353
LL | iter! { move || {
5454
| _____________^
5555
LL | |

0 commit comments

Comments
 (0)