summaryrefslogtreecommitdiffstats
path: root/tests/rustdoc-ui/error-in-impl-trait
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /tests/rustdoc-ui/error-in-impl-trait
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/rustdoc-ui/error-in-impl-trait')
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/README.md7
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/async.rs7
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/closure.rs5
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/const-generics.rs23
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/generic-argument.rs7
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/impl-keyword-closure.rs6
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/impl-keyword.rs6
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/realistic-async.rs28
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs10
-rw-r--r--tests/rustdoc-ui/error-in-impl-trait/trait-alias.rs10
10 files changed, 109 insertions, 0 deletions
diff --git a/tests/rustdoc-ui/error-in-impl-trait/README.md b/tests/rustdoc-ui/error-in-impl-trait/README.md
new file mode 100644
index 000000000..1176a4a8c
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/README.md
@@ -0,0 +1,7 @@
+Each of these needs to be in a separate file,
+because the `delay_span_bug` ICE in rustdoc won't be triggerred
+if even a single other error was emitted.
+
+However, conceptually they are all testing basically the same thing.
+See https://github.com/rust-lang/rust/pull/73566#issuecomment-653689128
+for more details.
diff --git a/tests/rustdoc-ui/error-in-impl-trait/async.rs b/tests/rustdoc-ui/error-in-impl-trait/async.rs
new file mode 100644
index 000000000..cda53bff0
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/async.rs
@@ -0,0 +1,7 @@
+// edition:2018
+// check-pass
+
+/// Should compile fine
+pub async fn a() -> u32 {
+ error::_in::async_fn()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/closure.rs b/tests/rustdoc-ui/error-in-impl-trait/closure.rs
new file mode 100644
index 000000000..f1fd85bb2
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/closure.rs
@@ -0,0 +1,5 @@
+// check-pass
+// manually desugared version of an `async fn` (but with a closure instead of a generator)
+pub fn a() -> impl Fn() -> u32 {
+ || content::doesnt::matter()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/const-generics.rs b/tests/rustdoc-ui/error-in-impl-trait/const-generics.rs
new file mode 100644
index 000000000..ed62f0208
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/const-generics.rs
@@ -0,0 +1,23 @@
+// check-pass
+// edition:2018
+trait ValidTrait {}
+
+/// This has docs
+pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]> {
+ loop {}
+}
+
+pub trait Trait<const N: usize> {}
+impl Trait<1> for u8 {}
+impl Trait<2> for u8 {}
+impl<const N: usize> Trait<N> for [u8; N] {}
+
+/// This also has docs
+pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N> {
+ loop {}
+}
+
+/// Document all the functions
+pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N> {
+ loop {}
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/generic-argument.rs b/tests/rustdoc-ui/error-in-impl-trait/generic-argument.rs
new file mode 100644
index 000000000..dcec379d4
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/generic-argument.rs
@@ -0,0 +1,7 @@
+// check-pass
+trait ValidTrait {}
+
+/// This has docs
+pub fn f() -> impl ValidTrait {
+ Vec::<DoesNotExist>::new()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/impl-keyword-closure.rs b/tests/rustdoc-ui/error-in-impl-trait/impl-keyword-closure.rs
new file mode 100644
index 000000000..b935b0832
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/impl-keyword-closure.rs
@@ -0,0 +1,6 @@
+// check-pass
+pub trait ValidTrait {}
+/// This returns impl trait
+pub fn g() -> impl ValidTrait {
+ (|| error::_in::impl_trait::alias::nested::closure())()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/impl-keyword.rs b/tests/rustdoc-ui/error-in-impl-trait/impl-keyword.rs
new file mode 100644
index 000000000..701126f87
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/impl-keyword.rs
@@ -0,0 +1,6 @@
+// check-pass
+pub trait ValidTrait {}
+/// This returns impl trait
+pub fn g() -> impl ValidTrait {
+ error::_in::impl_trait()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/realistic-async.rs b/tests/rustdoc-ui/error-in-impl-trait/realistic-async.rs
new file mode 100644
index 000000000..248575d35
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/realistic-async.rs
@@ -0,0 +1,28 @@
+// edition:2018
+// check-pass
+
+mod windows {
+ pub trait WinFoo {
+ fn foo(&self) {}
+ }
+
+ impl WinFoo for () {}
+}
+
+#[cfg(any(windows, doc))]
+use windows::*;
+
+mod unix {
+ pub trait UnixFoo {
+ fn foo(&self) {}
+ }
+
+ impl UnixFoo for () {}
+}
+
+#[cfg(any(unix, doc))]
+use unix::*;
+
+async fn bar() {
+ ().foo()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs b/tests/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs
new file mode 100644
index 000000000..31dd786cb
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs
@@ -0,0 +1,10 @@
+// check-pass
+#![feature(type_alias_impl_trait)]
+
+pub trait ValidTrait {}
+type ImplTrait = impl ValidTrait;
+
+/// This returns impl trait, but using a type alias
+pub fn h() -> ImplTrait {
+ (|| error::_in::impl_trait::alias::nested::closure())()
+}
diff --git a/tests/rustdoc-ui/error-in-impl-trait/trait-alias.rs b/tests/rustdoc-ui/error-in-impl-trait/trait-alias.rs
new file mode 100644
index 000000000..c18a024af
--- /dev/null
+++ b/tests/rustdoc-ui/error-in-impl-trait/trait-alias.rs
@@ -0,0 +1,10 @@
+// check-pass
+#![feature(type_alias_impl_trait)]
+
+pub trait ValidTrait {}
+type ImplTrait = impl ValidTrait;
+
+/// This returns impl trait, but using a type alias
+pub fn h() -> ImplTrait {
+ error::_in::impl_trait::alias()
+}