about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2024-01-18 21:14:16 +0100
committerNadrieril <nadrieril+git@gmail.com>2024-01-22 16:24:37 +0100
commit3ff10242fee5356cb4be91db6df2eee6b9a34089 (patch)
tree23806f3281e4f9100aaba87436fd9c08cb08bf9f
parentc5a4e074f052d0528451035df58c0f612ee45118 (diff)
downloadrust-3ff10242fee5356cb4be91db6df2eee6b9a34089.tar.gz
rust-3ff10242fee5356cb4be91db6df2eee6b9a34089.zip
Test async fn
-rw-r--r--tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.rs16
-rw-r--r--tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.stderr12
-rw-r--r--tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs6
3 files changed, 34 insertions, 0 deletions
diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.rs b/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.rs
new file mode 100644
index 00000000000..9150c831c89
--- /dev/null
+++ b/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.rs
@@ -0,0 +1,16 @@
+// edition: 2018
+// known-bug: #120240
+#![feature(never_patterns)]
+#![allow(incomplete_features)]
+
+fn main() {}
+
+enum Void {}
+
+// Divergence is not detected.
+async fn async_never(!: Void) -> ! {} // gives an error
+
+// Divergence is detected
+async fn async_let(x: Void) -> ! {
+    let ! = x;
+}
diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.stderr b/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.stderr
new file mode 100644
index 00000000000..fa71feee5f5
--- /dev/null
+++ b/tests/ui/rfcs/rfc-0000-never_patterns/120240-async-fn-never-arg.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+  --> $DIR/120240-async-fn-never-arg.rs:11:36
+   |
+LL | async fn async_never(!: Void) -> ! {} // gives an error
+   |                                    ^^ expected `!`, found `()`
+   |
+   = note:   expected type `!`
+           found unit type `()`
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs b/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs
index 57151e246ff..3783100b502 100644
--- a/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs
+++ b/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs
@@ -1,4 +1,5 @@
 // check-pass
+// edition: 2018
 #![feature(never_patterns)]
 #![allow(incomplete_features)]
 #![deny(unreachable_patterns)]
@@ -30,3 +31,8 @@ fn never_match() -> ! {
     // Ensures this typechecks because of divergence and not the type of the match expression.
     println!();
 }
+
+// Note: divergence is not detected for async fns when the `!` is in the argument (#120240).
+async fn async_let(x: Void) -> ! {
+    let ! = x;
+}