about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-11-25 09:24:52 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-11-25 09:24:52 +0000
commit85c708132f3f393ba7df67fc82a85488672c200a (patch)
tree223f16e8461f7555b5c1fdff313c5de30bb72fac
parent9c958196e717744257e40623ca6598b82e050b9f (diff)
parent4ae658683f87b0f34ffb5c06f50ca1c51333a1a4 (diff)
Sync from rust 37b2813a7be580ef59048a6bd08444c79e5cc97f
-rw-r--r--build_system/tests.rs9
-rw-r--r--config.txt1
-rw-r--r--example/gen_block_iterate.rs36
-rw-r--r--rustfmt.toml5
4 files changed, 50 insertions, 1 deletions
diff --git a/build_system/tests.rs b/build_system/tests.rs
index 4cc572f0aba..3309a0a6abd 100644
--- a/build_system/tests.rs
+++ b/build_system/tests.rs
@@ -104,6 +104,15 @@ const BASE_SYSROOT_SUITE: &[TestCase] = &[
         runner.run_out_command("polymorphize_coroutine", &[]);
     }),
     TestCase::build_bin_and_run("aot.neon", "example/neon.rs", &[]),
+    TestCase::custom("aot.gen_block_iterate", &|runner| {
+        runner.run_rustc([
+            "example/gen_block_iterate.rs",
+            "--edition",
+            "2024",
+            "-Zunstable-options",
+        ]);
+        runner.run_out_command("gen_block_iterate", &[]);
+    }),
 ];
 
 pub(crate) static RAND_REPO: GitRepo = GitRepo::github(
diff --git a/config.txt b/config.txt
index 79284df6b19..0b7cac18837 100644
--- a/config.txt
+++ b/config.txt
@@ -44,6 +44,7 @@ aot.issue-72793
 aot.issue-59326
 aot.polymorphize_coroutine
 aot.neon
+aot.gen_block_iterate
 
 testsuite.extended_sysroot
 test.rust-random/rand
diff --git a/example/gen_block_iterate.rs b/example/gen_block_iterate.rs
new file mode 100644
index 00000000000..14bd23e77ea
--- /dev/null
+++ b/example/gen_block_iterate.rs
@@ -0,0 +1,36 @@
+// Copied from https://github.com/rust-lang/rust/blob/46455dc65069387f2dc46612f13fd45452ab301a/tests/ui/coroutine/gen_block_iterate.rs
+// revisions: next old
+//compile-flags: --edition 2024 -Zunstable-options
+//[next] compile-flags: -Ztrait-solver=next
+// run-pass
+#![feature(gen_blocks)]
+
+fn foo() -> impl Iterator<Item = u32> {
+    gen { yield 42; for x in 3..6 { yield x } }
+}
+
+fn moved() -> impl Iterator<Item = u32> {
+    let mut x = "foo".to_string();
+    gen move {
+        yield 42;
+        if x == "foo" { return }
+        x.clear();
+        for x in 3..6 { yield x }
+    }
+}
+
+fn main() {
+    let mut iter = foo();
+    assert_eq!(iter.next(), Some(42));
+    assert_eq!(iter.next(), Some(3));
+    assert_eq!(iter.next(), Some(4));
+    assert_eq!(iter.next(), Some(5));
+    assert_eq!(iter.next(), None);
+    // `gen` blocks are fused
+    assert_eq!(iter.next(), None);
+
+    let mut iter = moved();
+    assert_eq!(iter.next(), Some(42));
+    assert_eq!(iter.next(), None);
+
+}
diff --git a/rustfmt.toml b/rustfmt.toml
index ebeca8662a5..0f884187add 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -1,4 +1,7 @@
-ignore = ["y.rs"]
+ignore = [
+    "y.rs",
+    "example/gen_block_iterate.rs", # uses edition 2024
+]
 
 # Matches rustfmt.toml of rustc
 version = "Two"