summaryrefslogtreecommitdiffstats
path: root/tests/ui/lifetimes
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
commit9835e2ae736235810b4ea1c162ca5e65c547e770 (patch)
tree3fcebf40ed70e581d776a8a4c65923e8ec20e026 /tests/ui/lifetimes
parentReleasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff)
downloadrustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz
rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/lifetimes')
-rw-r--r--tests/ui/lifetimes/elided-lifetime-in-anon-const.rs20
-rw-r--r--tests/ui/lifetimes/issue-105675.rs14
-rw-r--r--tests/ui/lifetimes/issue-105675.stderr109
-rw-r--r--tests/ui/lifetimes/issue-36744-without-calls.rs13
-rw-r--r--tests/ui/lifetimes/issue-64173-unused-lifetimes.rs2
-rw-r--r--tests/ui/lifetimes/issue-64173-unused-lifetimes.stderr11
-rw-r--r--tests/ui/lifetimes/issue-69314.stderr2
-rw-r--r--tests/ui/lifetimes/issue-79187-2.stderr4
-rw-r--r--tests/ui/lifetimes/issue-79187.stderr4
-rw-r--r--tests/ui/lifetimes/unusual-rib-combinations.rs2
-rw-r--r--tests/ui/lifetimes/unusual-rib-combinations.stderr8
11 files changed, 177 insertions, 12 deletions
diff --git a/tests/ui/lifetimes/elided-lifetime-in-anon-const.rs b/tests/ui/lifetimes/elided-lifetime-in-anon-const.rs
new file mode 100644
index 000000000..69a7b61ba
--- /dev/null
+++ b/tests/ui/lifetimes/elided-lifetime-in-anon-const.rs
@@ -0,0 +1,20 @@
+// Verify that elided lifetimes inside anonymous constants are not forced to be `'static`.
+// check-pass
+
+fn foo() -> [(); {
+ let a = 10_usize;
+ let b: &'_ usize = &a;
+ *b
+ }] {
+ [(); 10]
+}
+
+fn bar() -> [(); 10] {
+ [(); {
+ let a = 10_usize;
+ let b: &'_ usize = &a;
+ *b
+ }]
+}
+
+fn main() {}
diff --git a/tests/ui/lifetimes/issue-105675.rs b/tests/ui/lifetimes/issue-105675.rs
new file mode 100644
index 000000000..58d8be8b6
--- /dev/null
+++ b/tests/ui/lifetimes/issue-105675.rs
@@ -0,0 +1,14 @@
+fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+
+fn main() {
+ let f = | _ , y: &u32 , z | ();
+ thing(f);
+ //~^ ERROR mismatched types
+ //~^^ ERROR mismatched types
+ let f = | x, y: _ , z: u32 | ();
+ thing(f);
+ //~^ ERROR mismatched types
+ //~^^ ERROR mismatched types
+ //~^^^ ERROR implementation of `FnOnce` is not general enough
+ //~^^^^ ERROR implementation of `FnOnce` is not general enough
+}
diff --git a/tests/ui/lifetimes/issue-105675.stderr b/tests/ui/lifetimes/issue-105675.stderr
new file mode 100644
index 000000000..66415f72b
--- /dev/null
+++ b/tests/ui/lifetimes/issue-105675.stderr
@@ -0,0 +1,109 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-105675.rs:5:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ one type is more general than the other
+ |
+ = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+ found trait `for<'a> FnOnce<(&u32, &'a u32, u32)>`
+note: this closure does not fulfill the lifetime requirements
+ --> $DIR/issue-105675.rs:4:13
+ |
+LL | let f = | _ , y: &u32 , z | ();
+ | ^^^^^^^^^^^^^^^^^^^
+note: the lifetime requirement is introduced here
+ --> $DIR/issue-105675.rs:1:18
+ |
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+help: consider specifying the type of the closure parameters
+ |
+LL | let f = |_: &_, y: &u32, z| ();
+ | ~~~~~~~~~~~~~~~~~~~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-105675.rs:5:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ one type is more general than the other
+ |
+ = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+ found trait `for<'a> FnOnce<(&u32, &'a u32, u32)>`
+note: this closure does not fulfill the lifetime requirements
+ --> $DIR/issue-105675.rs:4:13
+ |
+LL | let f = | _ , y: &u32 , z | ();
+ | ^^^^^^^^^^^^^^^^^^^
+note: the lifetime requirement is introduced here
+ --> $DIR/issue-105675.rs:1:18
+ |
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-105675.rs:9:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ one type is more general than the other
+ |
+ = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+ found trait `FnOnce<(&u32, &u32, u32)>`
+note: this closure does not fulfill the lifetime requirements
+ --> $DIR/issue-105675.rs:8:13
+ |
+LL | let f = | x, y: _ , z: u32 | ();
+ | ^^^^^^^^^^^^^^^^^^^^^
+note: the lifetime requirement is introduced here
+ --> $DIR/issue-105675.rs:1:18
+ |
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+help: consider specifying the type of the closure parameters
+ |
+LL | let f = |x: &_, y: &_, z: u32| ();
+ | ~~~~~~~~~~~~~~~~~~~~~~
+
+error[E0308]: mismatched types
+ --> $DIR/issue-105675.rs:9:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ one type is more general than the other
+ |
+ = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+ found trait `FnOnce<(&u32, &u32, u32)>`
+note: this closure does not fulfill the lifetime requirements
+ --> $DIR/issue-105675.rs:8:13
+ |
+LL | let f = | x, y: _ , z: u32 | ();
+ | ^^^^^^^^^^^^^^^^^^^^^
+note: the lifetime requirement is introduced here
+ --> $DIR/issue-105675.rs:1:18
+ |
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+help: consider specifying the type of the closure parameters
+ |
+LL | let f = |x: &_, y: &_, z: u32| ();
+ | ~~~~~~~~~~~~~~~~~~~~~~
+
+error: implementation of `FnOnce` is not general enough
+ --> $DIR/issue-105675.rs:9:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ implementation of `FnOnce` is not general enough
+ |
+ = note: closure with signature `fn(&'2 u32, &u32, u32)` must implement `FnOnce<(&'1 u32, &u32, u32)>`, for any lifetime `'1`...
+ = note: ...but it actually implements `FnOnce<(&'2 u32, &u32, u32)>`, for some specific lifetime `'2`
+
+error: implementation of `FnOnce` is not general enough
+ --> $DIR/issue-105675.rs:9:5
+ |
+LL | thing(f);
+ | ^^^^^^^^ implementation of `FnOnce` is not general enough
+ |
+ = note: closure with signature `fn(&u32, &'2 u32, u32)` must implement `FnOnce<(&u32, &'1 u32, u32)>`, for any lifetime `'1`...
+ = note: ...but it actually implements `FnOnce<(&u32, &'2 u32, u32)>`, for some specific lifetime `'2`
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/lifetimes/issue-36744-without-calls.rs b/tests/ui/lifetimes/issue-36744-without-calls.rs
new file mode 100644
index 000000000..dc5dc4f13
--- /dev/null
+++ b/tests/ui/lifetimes/issue-36744-without-calls.rs
@@ -0,0 +1,13 @@
+// build-pass
+// Tests for an LLVM abort when storing a lifetime-parametric fn into
+// context that is expecting one that is not lifetime-parametric
+// (i.e., has no `for <'_>`).
+
+pub struct A<'a>(&'a ());
+pub struct S<T>(T);
+
+pub fn bad<'s>(v: &mut S<fn(A<'s>)>, y: S<for<'b> fn(A<'b>)>) {
+ *v = y;
+}
+
+fn main() {}
diff --git a/tests/ui/lifetimes/issue-64173-unused-lifetimes.rs b/tests/ui/lifetimes/issue-64173-unused-lifetimes.rs
index 8080dd7dc..3879784d0 100644
--- a/tests/ui/lifetimes/issue-64173-unused-lifetimes.rs
+++ b/tests/ui/lifetimes/issue-64173-unused-lifetimes.rs
@@ -13,7 +13,7 @@ const fn foo<T>() -> usize {
}
struct Bar<'a> { //~ ERROR: parameter `'a` is never used
- beta: [(); foo::<&'a ()>()], //~ ERROR: a non-static lifetime is not allowed in a `const`
+ beta: [(); foo::<&'a ()>()], //~ ERROR: generic parameters may not be used in const operations
}
fn main() {}
diff --git a/tests/ui/lifetimes/issue-64173-unused-lifetimes.stderr b/tests/ui/lifetimes/issue-64173-unused-lifetimes.stderr
index a487cbea5..02ca10b2e 100644
--- a/tests/ui/lifetimes/issue-64173-unused-lifetimes.stderr
+++ b/tests/ui/lifetimes/issue-64173-unused-lifetimes.stderr
@@ -1,11 +1,11 @@
-error[E0658]: a non-static lifetime is not allowed in a `const`
+error: generic parameters may not be used in const operations
--> $DIR/issue-64173-unused-lifetimes.rs:16:23
|
LL | beta: [(); foo::<&'a ()>()],
- | ^^
+ | ^^ cannot perform const operation using `'a`
|
- = note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
- = help: add `#![feature(generic_const_exprs)]` to the crate attributes to enable
+ = note: lifetime parameters may not be used in const expressions
+ = help: use `#![feature(generic_const_exprs)]` to allow generic const expressions
error: generic `Self` types are currently not permitted in anonymous constants
--> $DIR/issue-64173-unused-lifetimes.rs:4:28
@@ -31,5 +31,4 @@ LL | struct Bar<'a> {
error: aborting due to 4 previous errors
-Some errors have detailed explanations: E0392, E0658.
-For more information about an error, try `rustc --explain E0392`.
+For more information about this error, try `rustc --explain E0392`.
diff --git a/tests/ui/lifetimes/issue-69314.stderr b/tests/ui/lifetimes/issue-69314.stderr
index 7ae678928..3879f3550 100644
--- a/tests/ui/lifetimes/issue-69314.stderr
+++ b/tests/ui/lifetimes/issue-69314.stderr
@@ -12,6 +12,8 @@ LL | async fn f2(m: Msg<'_>) {}
error[E0597]: `buf` does not live long enough
--> $DIR/issue-69314.rs:14:19
|
+LL | let mut buf = [0; 512];
+ | ------- binding `buf` declared here
LL | let m2 = &buf[..];
| ^^^ borrowed value does not live long enough
LL | let m = Self::g(m2).await;
diff --git a/tests/ui/lifetimes/issue-79187-2.stderr b/tests/ui/lifetimes/issue-79187-2.stderr
index c5f654b37..75fd87b3f 100644
--- a/tests/ui/lifetimes/issue-79187-2.stderr
+++ b/tests/ui/lifetimes/issue-79187-2.stderr
@@ -43,6 +43,10 @@ note: the lifetime requirement is introduced here
|
LL | fn take_foo(_: impl Foo) {}
| ^^^
+help: consider specifying the type of the closure parameters
+ |
+LL | take_foo(|a: &_| a);
+ | ~~~~~~~
error[E0308]: mismatched types
--> $DIR/issue-79187-2.rs:11:5
diff --git a/tests/ui/lifetimes/issue-79187.stderr b/tests/ui/lifetimes/issue-79187.stderr
index ee6e7b89d..209f2b7b7 100644
--- a/tests/ui/lifetimes/issue-79187.stderr
+++ b/tests/ui/lifetimes/issue-79187.stderr
@@ -16,6 +16,10 @@ note: the lifetime requirement is introduced here
|
LL | fn thing(x: impl FnOnce(&u32)) {}
| ^^^^^^^^^^^^
+help: consider specifying the type of the closure parameters
+ |
+LL | let f = |_: &_| ();
+ | ~~~~~~~
error: implementation of `FnOnce` is not general enough
--> $DIR/issue-79187.rs:5:5
diff --git a/tests/ui/lifetimes/unusual-rib-combinations.rs b/tests/ui/lifetimes/unusual-rib-combinations.rs
index 0ae68ad04..2f5ba9844 100644
--- a/tests/ui/lifetimes/unusual-rib-combinations.rs
+++ b/tests/ui/lifetimes/unusual-rib-combinations.rs
@@ -27,7 +27,7 @@ fn d<const C: S>() {}
trait Foo<'a> {}
struct Bar<const N: &'a (dyn for<'a> Foo<'a>)>;
-//~^ ERROR use of non-static lifetime `'a` in const generic
+//~^ ERROR the type of const parameters must not depend on other generic parameters
//~| ERROR `&dyn for<'a> Foo<'a>` is forbidden as the type of a const generic parameter
fn main() {}
diff --git a/tests/ui/lifetimes/unusual-rib-combinations.stderr b/tests/ui/lifetimes/unusual-rib-combinations.stderr
index 20163d289..4994e4dc4 100644
--- a/tests/ui/lifetimes/unusual-rib-combinations.stderr
+++ b/tests/ui/lifetimes/unusual-rib-combinations.stderr
@@ -9,13 +9,13 @@ help: consider introducing a named lifetime parameter
LL | fn d<'a, const C: S<'a>>() {}
| +++ ++++
-error[E0771]: use of non-static lifetime `'a` in const generic
+error[E0770]: the type of const parameters must not depend on other generic parameters
--> $DIR/unusual-rib-combinations.rs:29:22
|
LL | struct Bar<const N: &'a (dyn for<'a> Foo<'a>)>;
- | ^^
+ | ^^ the type must not depend on the parameter `'a`
|
- = note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052>
+ = note: lifetime parameters may not be used in the type of const parameters
error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
--> $DIR/unusual-rib-combinations.rs:7:16
@@ -74,5 +74,5 @@ LL | struct Bar<const N: &'a (dyn for<'a> Foo<'a>)>;
error: aborting due to 9 previous errors
-Some errors have detailed explanations: E0106, E0214, E0308, E0771.
+Some errors have detailed explanations: E0106, E0214, E0308, E0770.
For more information about an error, try `rustc --explain E0106`.