about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/rustdoc/intra-doc/basic.rs17
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/enum.fixed9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/enum.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/enum.stderr14
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/existing_generics.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr10
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr14
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs8
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr8
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-simple.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr14
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/struct.fixed9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/struct.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/struct.stderr14
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/trait.fixed11
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/trait.rs11
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/trait.stderr14
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/type.fixed9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/type.rs9
-rw-r--r--tests/ui/parser/suggest_misplaced_generics/type.stderr14
-rw-r--r--tests/ui/single-use-lifetime/issue-107998.rs9
-rw-r--r--tests/ui/single-use-lifetime/issue-107998.stderr30
-rw-r--r--tests/ui/traits/issue-103563.rs75
26 files changed, 362 insertions, 0 deletions
diff --git a/tests/rustdoc/intra-doc/basic.rs b/tests/rustdoc/intra-doc/basic.rs
index 39f5c298bc4..e2d3ef425cb 100644
--- a/tests/rustdoc/intra-doc/basic.rs
+++ b/tests/rustdoc/intra-doc/basic.rs
@@ -1,21 +1,38 @@
 // @has basic/index.html
 // @has - '//a/@href' 'struct.ThisType.html'
+// @has - '//a/@title' 'struct basic::ThisType'
 // @has - '//a/@href' 'struct.ThisType.html#method.this_method'
+// @has - '//a/@title' 'associated function basic::ThisType::this_method'
 // @has - '//a/@href' 'enum.ThisEnum.html'
+// @has - '//a/@title' 'enum basic::ThisEnum'
 // @has - '//a/@href' 'enum.ThisEnum.html#variant.ThisVariant'
+// @has - '//a/@title' 'variant basic::ThisEnum::ThisVariant'
 // @has - '//a/@href' 'trait.ThisTrait.html'
+// @has - '//a/@title' 'trait basic::ThisTrait'
 // @has - '//a/@href' 'trait.ThisTrait.html#tymethod.this_associated_method'
+// @has - '//a/@title' 'associated function basic::ThisTrait::this_associated_method'
 // @has - '//a/@href' 'trait.ThisTrait.html#associatedtype.ThisAssociatedType'
+// @has - '//a/@title' 'associated type basic::ThisTrait::ThisAssociatedType'
 // @has - '//a/@href' 'trait.ThisTrait.html#associatedconstant.THIS_ASSOCIATED_CONST'
+// @has - '//a/@title' 'associated constant basic::ThisTrait::THIS_ASSOCIATED_CONST'
 // @has - '//a/@href' 'trait.ThisTrait.html'
+// @has - '//a/@title' 'trait basic::ThisTrait'
 // @has - '//a/@href' 'type.ThisAlias.html'
+// @has - '//a/@title' 'type basic::ThisAlias'
 // @has - '//a/@href' 'union.ThisUnion.html'
+// @has - '//a/@title' 'union basic::ThisUnion'
 // @has - '//a/@href' 'fn.this_function.html'
+// @has - '//a/@title' 'fn basic::this_function'
 // @has - '//a/@href' 'constant.THIS_CONST.html'
+// @has - '//a/@title' 'constant basic::THIS_CONST'
 // @has - '//a/@href' 'static.THIS_STATIC.html'
+// @has - '//a/@title' 'static basic::THIS_STATIC'
 // @has - '//a/@href' 'macro.this_macro.html'
+// @has - '//a/@title' 'macro basic::this_macro'
 // @has - '//a/@href' 'trait.SoAmbiguous.html'
+// @has - '//a/@title' 'trait basic::SoAmbiguous'
 // @has - '//a/@href' 'fn.SoAmbiguous.html'
+// @has - '//a/@title' 'fn basic::SoAmbiguous'
 //! In this crate we would like to link to:
 //!
 //! * [`ThisType`](ThisType)
diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.fixed b/tests/ui/parser/suggest_misplaced_generics/enum.fixed
new file mode 100644
index 00000000000..3332118a1e7
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/enum.fixed
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+enum Foo<T> { Variant(T) }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the enum name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.rs b/tests/ui/parser/suggest_misplaced_generics/enum.rs
new file mode 100644
index 00000000000..5a2289c5c5a
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/enum.rs
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+enum<T> Foo { Variant(T) }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the enum name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.stderr b/tests/ui/parser/suggest_misplaced_generics/enum.stderr
new file mode 100644
index 00000000000..5f5947627ee
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/enum.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/enum.rs:5:5
+   |
+LL | enum<T> Foo { Variant(T) }
+   |     ^ expected identifier
+   |
+help: place the generic parameter name after the enum name
+   |
+LL - enum<T> Foo { Variant(T) }
+LL + enum Foo<T> { Variant(T) }
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/existing_generics.rs b/tests/ui/parser/suggest_misplaced_generics/existing_generics.rs
new file mode 100644
index 00000000000..1dc182398d8
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/existing_generics.rs
@@ -0,0 +1,9 @@
+// Issue: 103366
+// there is already an existing generic on f, so don't show a suggestion
+
+#[allow(unused)]
+fn<'a, B: 'a + std::ops::Add<Output = u32>> f<T>(_x: B) { }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the fn name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr b/tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr
new file mode 100644
index 00000000000..89716e6f1ed
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr
@@ -0,0 +1,10 @@
+error: expected identifier, found `<`
+  --> $DIR/existing_generics.rs:5:3
+   |
+LL | fn<'a, B: 'a + std::ops::Add<Output = u32>> f<T>(_x: B) { }
+   |   ^ expected identifier
+   |
+   = help: place the generic parameter name after the fn name
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed
new file mode 100644
index 00000000000..84bf64bd63c
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+fn f<'a, B: 'a + std::ops::Add<Output = u32>>(_x: B) { }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the fn name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs
new file mode 100644
index 00000000000..d0684397e74
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+fn<'a, B: 'a + std::ops::Add<Output = u32>> f(_x: B) { }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the fn name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr
new file mode 100644
index 00000000000..061d0910a74
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/fn-complex-generics.rs:5:3
+   |
+LL | fn<'a, B: 'a + std::ops::Add<Output = u32>> f(_x: B) { }
+   |   ^ expected identifier
+   |
+help: place the generic parameter name after the fn name
+   |
+LL - fn<'a, B: 'a + std::ops::Add<Output = u32>> f(_x: B) { }
+LL + fn f<'a, B: 'a + std::ops::Add<Output = u32>>(_x: B) { }
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs
new file mode 100644
index 00000000000..7fcb6a82ce4
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs
@@ -0,0 +1,8 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// The generics fail to parse here, so don't make any suggestions/help
+
+#[allow(unused)]
+fn<~>()> id(x: T) -> T { x }
+//~^ ERROR expected identifier, found `<`
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr
new file mode 100644
index 00000000000..47e12016938
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr
@@ -0,0 +1,8 @@
+error: expected identifier, found `<`
+  --> $DIR/fn-invalid-generics.rs:5:3
+   |
+LL | fn<~>()> id(x: T) -> T { x }
+   |   ^ expected identifier
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed
new file mode 100644
index 00000000000..cbfd5f2d39c
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+fn id<T>(x: T) -> T { x }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the fn name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs b/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs
new file mode 100644
index 00000000000..b207cf70d85
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+fn<T> id(x: T) -> T { x }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the fn name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr
new file mode 100644
index 00000000000..e749f1a0d00
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/fn-simple.rs:5:3
+   |
+LL | fn<T> id(x: T) -> T { x }
+   |   ^ expected identifier
+   |
+help: place the generic parameter name after the fn name
+   |
+LL - fn<T> id(x: T) -> T { x }
+LL + fn id<T>(x: T) -> T { x }
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.fixed b/tests/ui/parser/suggest_misplaced_generics/struct.fixed
new file mode 100644
index 00000000000..fec05bdeca1
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/struct.fixed
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+struct Foo<T> { x: T }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the struct name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.rs b/tests/ui/parser/suggest_misplaced_generics/struct.rs
new file mode 100644
index 00000000000..6b80150d546
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/struct.rs
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+struct<T> Foo { x: T }
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the struct name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.stderr b/tests/ui/parser/suggest_misplaced_generics/struct.stderr
new file mode 100644
index 00000000000..2b650907092
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/struct.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/struct.rs:5:7
+   |
+LL | struct<T> Foo { x: T }
+   |       ^ expected identifier
+   |
+help: place the generic parameter name after the struct name
+   |
+LL - struct<T> Foo { x: T }
+LL + struct Foo<T> { x: T }
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.fixed b/tests/ui/parser/suggest_misplaced_generics/trait.fixed
new file mode 100644
index 00000000000..a471a078af1
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/trait.fixed
@@ -0,0 +1,11 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+trait Foo<T> {
+    //~^ ERROR expected identifier, found `<`
+    //~| HELP place the generic parameter name after the trait name
+}
+
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.rs b/tests/ui/parser/suggest_misplaced_generics/trait.rs
new file mode 100644
index 00000000000..55355f451f9
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/trait.rs
@@ -0,0 +1,11 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+trait<T> Foo {
+    //~^ ERROR expected identifier, found `<`
+    //~| HELP place the generic parameter name after the trait name
+}
+
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.stderr b/tests/ui/parser/suggest_misplaced_generics/trait.stderr
new file mode 100644
index 00000000000..ac86cfa4697
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/trait.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/trait.rs:5:6
+   |
+LL | trait<T> Foo {
+   |      ^ expected identifier
+   |
+help: place the generic parameter name after the trait name
+   |
+LL - trait<T> Foo {
+LL + trait Foo<T> {
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/suggest_misplaced_generics/type.fixed b/tests/ui/parser/suggest_misplaced_generics/type.fixed
new file mode 100644
index 00000000000..a97b9e66d0b
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/type.fixed
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+type Foo<T> = T;
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the type name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/type.rs b/tests/ui/parser/suggest_misplaced_generics/type.rs
new file mode 100644
index 00000000000..17e200536fa
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/type.rs
@@ -0,0 +1,9 @@
+// Issue: 103366 , Suggest fix for misplaced generic params
+// run-rustfix
+
+#[allow(unused)]
+type<T> Foo = T;
+//~^ ERROR expected identifier, found `<`
+//~| HELP place the generic parameter name after the type name
+
+fn main() {}
diff --git a/tests/ui/parser/suggest_misplaced_generics/type.stderr b/tests/ui/parser/suggest_misplaced_generics/type.stderr
new file mode 100644
index 00000000000..22744f6cf37
--- /dev/null
+++ b/tests/ui/parser/suggest_misplaced_generics/type.stderr
@@ -0,0 +1,14 @@
+error: expected identifier, found `<`
+  --> $DIR/type.rs:5:5
+   |
+LL | type<T> Foo = T;
+   |     ^ expected identifier
+   |
+help: place the generic parameter name after the type name
+   |
+LL - type<T> Foo = T;
+LL + type Foo<T> = T;
+   |
+
+error: aborting due to previous error
+
diff --git a/tests/ui/single-use-lifetime/issue-107998.rs b/tests/ui/single-use-lifetime/issue-107998.rs
new file mode 100644
index 00000000000..f32688d2058
--- /dev/null
+++ b/tests/ui/single-use-lifetime/issue-107998.rs
@@ -0,0 +1,9 @@
+#![deny(single_use_lifetimes)]
+
+fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
+    //~^ ERROR function pointer types may not have generic parameters
+    //~| ERROR lifetime parameter `'a` only used once
+    f(&3)
+}
+
+fn main() {}
diff --git a/tests/ui/single-use-lifetime/issue-107998.stderr b/tests/ui/single-use-lifetime/issue-107998.stderr
new file mode 100644
index 00000000000..e870351de9e
--- /dev/null
+++ b/tests/ui/single-use-lifetime/issue-107998.stderr
@@ -0,0 +1,30 @@
+error: function pointer types may not have generic parameters
+  --> $DIR/issue-107998.rs:3:18
+   |
+LL | fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
+   |                  ^^^^
+   |
+help: consider moving the lifetime parameter to a `for` parameter list
+   |
+LL - fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
+LL + fn with<R>(f: &for<'a> fn(x: &'a i32) -> R) -> R {
+   |
+
+error: lifetime parameter `'a` only used once
+  --> $DIR/issue-107998.rs:3:19
+   |
+LL | fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
+   |                   ^^      ---
+   |                   |       |
+   |                   |       ...is used only here
+   |                   |       help: elide the single-use lifetime
+   |                   this lifetime...
+   |
+note: the lint level is defined here
+  --> $DIR/issue-107998.rs:1:9
+   |
+LL | #![deny(single_use_lifetimes)]
+   |         ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/traits/issue-103563.rs b/tests/ui/traits/issue-103563.rs
new file mode 100644
index 00000000000..cd3eea09b99
--- /dev/null
+++ b/tests/ui/traits/issue-103563.rs
@@ -0,0 +1,75 @@
+// build-pass
+
+fn main() {
+    let mut log_service = LogService { inner: Inner };
+    log_service.call(());
+}
+
+pub trait Service<Request> {
+    type Response;
+
+    fn call(&mut self, req: Request) -> Self::Response;
+}
+
+pub struct LogService<S> {
+    inner: S,
+}
+
+impl<T, U, S> Service<T> for LogService<S>
+where
+    S: Service<T, Response = U>,
+    U: Extension + 'static,
+    for<'a> U::Item<'a>: std::fmt::Debug,
+{
+    type Response = S::Response;
+
+    fn call(&mut self, req: T) -> Self::Response {
+        self.inner.call(req)
+    }
+}
+
+pub struct Inner;
+
+impl Service<()> for Inner {
+    type Response = Resp;
+
+    fn call(&mut self, req: ()) -> Self::Response {
+        Resp::A(req)
+    }
+}
+
+pub trait Extension {
+    type Item<'a>;
+
+    fn touch<F>(self, f: F) -> Self
+    where
+        for<'a> F: Fn(Self::Item<'a>);
+}
+
+pub enum Resp {
+    A(()),
+}
+
+impl Extension for Resp {
+    type Item<'a> = RespItem<'a>;
+    fn touch<F>(self, _f: F) -> Self
+    where
+        for<'a> F: Fn(Self::Item<'a>),
+    {
+        match self {
+            Self::A(a) => Self::A(a),
+        }
+    }
+}
+
+pub enum RespItem<'a> {
+    A(&'a ()),
+}
+
+impl<'a> std::fmt::Debug for RespItem<'a> {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        match self {
+            Self::A(arg0) => f.debug_tuple("A").field(arg0).finish(),
+        }
+    }
+}