diff options
Diffstat (limited to 'tests/rustdoc-ui/error-in-impl-trait')
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() +} |