about summary refs log tree commit diff
path: root/tests/ui/impl-trait/precise-capturing
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/impl-trait/precise-capturing')
-rw-r--r--tests/ui/impl-trait/precise-capturing/apit.rs7
-rw-r--r--tests/ui/impl-trait/precise-capturing/apit.stderr17
-rw-r--r--tests/ui/impl-trait/precise-capturing/bad-lifetimes.rs14
-rw-r--r--tests/ui/impl-trait/precise-capturing/bad-lifetimes.stderr45
-rw-r--r--tests/ui/impl-trait/precise-capturing/bad-params.rs19
-rw-r--r--tests/ui/impl-trait/precise-capturing/bad-params.stderr46
-rw-r--r--tests/ui/impl-trait/precise-capturing/elided.rs8
-rw-r--r--tests/ui/impl-trait/precise-capturing/elided.stderr11
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.rs7
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.stderr19
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.rs10
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.stderr35
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.rs12
-rw-r--r--tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.stderr30
-rw-r--r--tests/ui/impl-trait/precise-capturing/higher-ranked.rs18
-rw-r--r--tests/ui/impl-trait/precise-capturing/higher-ranked.stderr11
-rw-r--r--tests/ui/impl-trait/precise-capturing/ordering.rs16
-rw-r--r--tests/ui/impl-trait/precise-capturing/ordering.stderr37
-rw-r--r--tests/ui/impl-trait/precise-capturing/outlives.rs16
-rw-r--r--tests/ui/impl-trait/precise-capturing/outlives.stderr11
-rw-r--r--tests/ui/impl-trait/precise-capturing/self-capture.rs10
-rw-r--r--tests/ui/impl-trait/precise-capturing/self-capture.stderr11
22 files changed, 410 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/precise-capturing/apit.rs b/tests/ui/impl-trait/precise-capturing/apit.rs
new file mode 100644
index 00000000000..efcac9ebb0b
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/apit.rs
@@ -0,0 +1,7 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn hello(_: impl use<> Sized) {}
+//~^ ERROR `use<...>` precise capturing syntax not allowed on argument-position `impl Trait`
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/apit.stderr b/tests/ui/impl-trait/precise-capturing/apit.stderr
new file mode 100644
index 00000000000..36bf80d9e2f
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/apit.stderr
@@ -0,0 +1,17 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/apit.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: `use<...>` precise capturing syntax not allowed on argument-position `impl Trait`
+  --> $DIR/apit.rs:4:18
+   |
+LL | fn hello(_: impl use<> Sized) {}
+   |                  ^^^
+
+error: aborting due to 1 previous error; 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/bad-lifetimes.rs b/tests/ui/impl-trait/precise-capturing/bad-lifetimes.rs
new file mode 100644
index 00000000000..623063a8f50
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/bad-lifetimes.rs
@@ -0,0 +1,14 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn no_elided_lt() -> impl use<'_> Sized {}
+//~^ ERROR missing lifetime specifier
+//~| ERROR expected lifetime parameter in `use<...>` precise captures list, found `'_`
+
+fn static_lt() -> impl use<'static> Sized {}
+//~^ ERROR expected lifetime parameter in `use<...>` precise captures list, found `'static`
+
+fn missing_lt() -> impl use<'missing> Sized {}
+//~^ ERROR use of undeclared lifetime name `'missing`
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/bad-lifetimes.stderr b/tests/ui/impl-trait/precise-capturing/bad-lifetimes.stderr
new file mode 100644
index 00000000000..a926362c50c
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/bad-lifetimes.stderr
@@ -0,0 +1,45 @@
+error[E0106]: missing lifetime specifier
+  --> $DIR/bad-lifetimes.rs:4:31
+   |
+LL | fn no_elided_lt() -> impl use<'_> Sized {}
+   |                               ^^ expected named lifetime parameter
+   |
+   = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
+help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
+   |
+LL | fn no_elided_lt() -> impl use<'static> Sized {}
+   |                               ~~~~~~~
+
+error[E0261]: use of undeclared lifetime name `'missing`
+  --> $DIR/bad-lifetimes.rs:11:29
+   |
+LL | fn missing_lt() -> impl use<'missing> Sized {}
+   |              -              ^^^^^^^^ undeclared lifetime
+   |              |
+   |              help: consider introducing lifetime `'missing` here: `<'missing>`
+
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/bad-lifetimes.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: expected lifetime parameter in `use<...>` precise captures list, found `'_`
+  --> $DIR/bad-lifetimes.rs:4:31
+   |
+LL | fn no_elided_lt() -> impl use<'_> Sized {}
+   |                               ^^
+
+error: expected lifetime parameter in `use<...>` precise captures list, found `'static`
+  --> $DIR/bad-lifetimes.rs:8:28
+   |
+LL | fn static_lt() -> impl use<'static> Sized {}
+   |                            ^^^^^^^
+
+error: aborting due to 4 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0106, E0261.
+For more information about an error, try `rustc --explain E0106`.
diff --git a/tests/ui/impl-trait/precise-capturing/bad-params.rs b/tests/ui/impl-trait/precise-capturing/bad-params.rs
new file mode 100644
index 00000000000..7970d49bf7c
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/bad-params.rs
@@ -0,0 +1,19 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn missing() -> impl use<T> Sized {}
+//~^ ERROR cannot find type `T` in this scope
+
+fn missing_self() -> impl use<Self> Sized {}
+//~^ ERROR cannot find type `Self` in this scope
+
+struct MyType;
+impl MyType {
+    fn self_is_not_param() -> impl use<Self> Sized {}
+    //~^ ERROR `Self` can't be captured in `use<...>` precise captures list, since it is an alias
+}
+
+fn hello() -> impl use<hello> Sized {}
+//~^ ERROR expected type or const parameter in `use<...>` precise captures list, found function
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/bad-params.stderr b/tests/ui/impl-trait/precise-capturing/bad-params.stderr
new file mode 100644
index 00000000000..27bf05302f9
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/bad-params.stderr
@@ -0,0 +1,46 @@
+error[E0412]: cannot find type `T` in this scope
+  --> $DIR/bad-params.rs:4:26
+   |
+LL | fn missing() -> impl use<T> Sized {}
+   |                          ^ not found in this scope
+   |
+help: you might be missing a type parameter
+   |
+LL | fn missing<T>() -> impl use<T> Sized {}
+   |           +++
+
+error[E0411]: cannot find type `Self` in this scope
+  --> $DIR/bad-params.rs:7:31
+   |
+LL | fn missing_self() -> impl use<Self> Sized {}
+   |    ------------               ^^^^ `Self` is only available in impls, traits, and type definitions
+   |    |
+   |    `Self` not allowed in a function
+
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/bad-params.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: `Self` can't be captured in `use<...>` precise captures list, since it is an alias
+  --> $DIR/bad-params.rs:12:40
+   |
+LL | impl MyType {
+   | ----------- `Self` is not a generic argument, but an alias to the type of the implementation
+LL |     fn self_is_not_param() -> impl use<Self> Sized {}
+   |                                        ^^^^
+
+error: expected type or const parameter in `use<...>` precise captures list, found function
+  --> $DIR/bad-params.rs:16:24
+   |
+LL | fn hello() -> impl use<hello> Sized {}
+   |                        ^^^^^
+
+error: aborting due to 4 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0411, E0412.
+For more information about an error, try `rustc --explain E0411`.
diff --git a/tests/ui/impl-trait/precise-capturing/elided.rs b/tests/ui/impl-trait/precise-capturing/elided.rs
new file mode 100644
index 00000000000..de80e8a5d58
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/elided.rs
@@ -0,0 +1,8 @@
+//@ check-pass
+
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn elided(x: &()) -> impl use<'_> Sized { x }
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/elided.stderr b/tests/ui/impl-trait/precise-capturing/elided.stderr
new file mode 100644
index 00000000000..38da0828de9
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/elided.stderr
@@ -0,0 +1,11 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/elided.rs:3:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.rs b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.rs
new file mode 100644
index 00000000000..1b604e6c358
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.rs
@@ -0,0 +1,7 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn constant<const C: usize>() -> impl use<> Sized {}
+//~^ ERROR `impl Trait` must mention all const parameters in scope
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.stderr b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.stderr
new file mode 100644
index 00000000000..9c99f2b711e
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-const.stderr
@@ -0,0 +1,19 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/forgot-to-capture-const.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: `impl Trait` must mention all const parameters in scope
+  --> $DIR/forgot-to-capture-const.rs:4:13
+   |
+LL | fn constant<const C: usize>() -> impl use<> Sized {}
+   |             ^^^^^^^^^^^^^^       ---------------- const parameter is implicitly captured by this `impl Trait`
+   |
+   = note: currently, all const parameters are required to be mentioned in the precise captures list
+
+error: aborting due to 1 previous error; 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.rs b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.rs
new file mode 100644
index 00000000000..cc86bf83107
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.rs
@@ -0,0 +1,10 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn lifetime_in_bounds<'a>(x: &'a ()) -> impl use<> Into<&'a ()> { x }
+//~^ ERROR `impl Trait` captures lifetime parameter, but it is not mentioned in `use<...>` precise captures list
+
+fn lifetime_in_hidden<'a>(x: &'a ()) -> impl use<> Sized { x }
+//~^ ERROR hidden type for `impl Sized` captures lifetime that does not appear in bounds
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.stderr b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.stderr
new file mode 100644
index 00000000000..e472c898050
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-lifetime.stderr
@@ -0,0 +1,35 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/forgot-to-capture-lifetime.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: `impl Trait` captures lifetime parameter, but it is not mentioned in `use<...>` precise captures list
+  --> $DIR/forgot-to-capture-lifetime.rs:4:58
+   |
+LL | fn lifetime_in_bounds<'a>(x: &'a ()) -> impl use<> Into<&'a ()> { x }
+   |                       --                -----------------^^----
+   |                       |                 |
+   |                       |                 lifetime captured due to being mentioned in the bounds of the `impl Trait`
+   |                       this lifetime parameter is captured
+
+error[E0700]: hidden type for `impl Sized` captures lifetime that does not appear in bounds
+  --> $DIR/forgot-to-capture-lifetime.rs:7:60
+   |
+LL | fn lifetime_in_hidden<'a>(x: &'a ()) -> impl use<> Sized { x }
+   |                       --                ----------------   ^
+   |                       |                 |
+   |                       |                 opaque type defined here
+   |                       hidden type `&'a ()` captures the lifetime `'a` as defined here
+   |
+help: to declare that `impl Sized` captures `'a`, you can add an explicit `'a` lifetime bound
+   |
+LL | fn lifetime_in_hidden<'a>(x: &'a ()) -> impl use<> Sized + 'a { x }
+   |                                                          ++++
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0700`.
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.rs b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.rs
new file mode 100644
index 00000000000..6eaff01183d
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.rs
@@ -0,0 +1,12 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn type_param<T>() -> impl use<> Sized {}
+//~^ ERROR `impl Trait` must mention all type parameters in scope
+
+trait Foo {
+//~^ ERROR `impl Trait` must mention all type parameters in scope
+    fn bar() -> impl use<> Sized;
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.stderr b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.stderr
new file mode 100644
index 00000000000..a8eb4547dcd
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/forgot-to-capture-type.stderr
@@ -0,0 +1,30 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/forgot-to-capture-type.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: `impl Trait` must mention all type parameters in scope
+  --> $DIR/forgot-to-capture-type.rs:4:15
+   |
+LL | fn type_param<T>() -> impl use<> Sized {}
+   |               ^       ---------------- type parameter is implicitly captured by this `impl Trait`
+   |
+   = note: currently, all type parameters are required to be mentioned in the precise captures list
+
+error: `impl Trait` must mention all type parameters in scope
+  --> $DIR/forgot-to-capture-type.rs:7:1
+   |
+LL | trait Foo {
+   | ^^^^^^^^^
+LL |
+LL |     fn bar() -> impl use<> Sized;
+   |                 ---------------- type parameter is implicitly captured by this `impl Trait`
+   |
+   = note: currently, all type parameters are required to be mentioned in the precise captures list
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/higher-ranked.rs b/tests/ui/impl-trait/precise-capturing/higher-ranked.rs
new file mode 100644
index 00000000000..28fb1fa4b9e
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/higher-ranked.rs
@@ -0,0 +1,18 @@
+//@ check-pass
+
+// Show how precise captures allow us to skip capturing a higher-ranked lifetime
+
+#![feature(lifetime_capture_rules_2024, precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+trait Trait<'a> {
+    type Item;
+}
+
+impl Trait<'_> for () {
+    type Item = Vec<()>;
+}
+
+fn hello() -> impl for<'a> Trait<'a, Item = impl use<> IntoIterator> {}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/higher-ranked.stderr b/tests/ui/impl-trait/precise-capturing/higher-ranked.stderr
new file mode 100644
index 00000000000..e48d6d42af0
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/higher-ranked.stderr
@@ -0,0 +1,11 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/higher-ranked.rs:5:41
+   |
+LL | #![feature(lifetime_capture_rules_2024, precise_capturing)]
+   |                                         ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/ordering.rs b/tests/ui/impl-trait/precise-capturing/ordering.rs
new file mode 100644
index 00000000000..2bace798c57
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/ordering.rs
@@ -0,0 +1,16 @@
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn lt<'a>() -> impl use<'a, 'a> Sized {}
+//~^ ERROR cannot capture parameter `'a` twice
+
+fn ty<T>() -> impl use<T, T> Sized {}
+//~^ ERROR cannot capture parameter `T` twice
+
+fn ct<const N: usize>() -> impl use<N, N> Sized {}
+//~^ ERROR cannot capture parameter `N` twice
+
+fn ordering<'a, T>() -> impl use<T, 'a> Sized {}
+//~^ ERROR lifetime parameter `'a` must be listed before non-lifetime parameters
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/ordering.stderr b/tests/ui/impl-trait/precise-capturing/ordering.stderr
new file mode 100644
index 00000000000..3f545108df5
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/ordering.stderr
@@ -0,0 +1,37 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/ordering.rs:1:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: cannot capture parameter `'a` twice
+  --> $DIR/ordering.rs:4:25
+   |
+LL | fn lt<'a>() -> impl use<'a, 'a> Sized {}
+   |                         ^^  -- parameter captured again here
+
+error: cannot capture parameter `T` twice
+  --> $DIR/ordering.rs:7:24
+   |
+LL | fn ty<T>() -> impl use<T, T> Sized {}
+   |                        ^  - parameter captured again here
+
+error: cannot capture parameter `N` twice
+  --> $DIR/ordering.rs:10:37
+   |
+LL | fn ct<const N: usize>() -> impl use<N, N> Sized {}
+   |                                     ^  - parameter captured again here
+
+error: lifetime parameter `'a` must be listed before non-lifetime parameters
+  --> $DIR/ordering.rs:13:37
+   |
+LL | fn ordering<'a, T>() -> impl use<T, 'a> Sized {}
+   |                                  -  ^^
+   |                                  |
+   |                                  move the lifetime before this parameter
+
+error: aborting due to 4 previous errors; 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/outlives.rs b/tests/ui/impl-trait/precise-capturing/outlives.rs
new file mode 100644
index 00000000000..71e6333934e
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/outlives.rs
@@ -0,0 +1,16 @@
+//@ check-pass
+
+// Show that precise captures allow us to skip a lifetime param for outlives
+
+#![feature(lifetime_capture_rules_2024, precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+fn hello<'a: 'a, 'b: 'b>() -> impl use<'a> Sized { }
+
+fn outlives<'a, T: 'a>(_: T) {}
+
+fn test<'a, 'b>() {
+    outlives::<'a, _>(hello::<'a, 'b>());
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/outlives.stderr b/tests/ui/impl-trait/precise-capturing/outlives.stderr
new file mode 100644
index 00000000000..405c09cccd9
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/outlives.stderr
@@ -0,0 +1,11 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/outlives.rs:5:41
+   |
+LL | #![feature(lifetime_capture_rules_2024, precise_capturing)]
+   |                                         ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/impl-trait/precise-capturing/self-capture.rs b/tests/ui/impl-trait/precise-capturing/self-capture.rs
new file mode 100644
index 00000000000..ecbc388e27b
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/self-capture.rs
@@ -0,0 +1,10 @@
+//@ check-pass
+
+#![feature(precise_capturing)]
+//~^ WARN the feature `precise_capturing` is incomplete
+
+trait Foo {
+    fn bar<'a>() -> impl use<Self> Sized;
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/precise-capturing/self-capture.stderr b/tests/ui/impl-trait/precise-capturing/self-capture.stderr
new file mode 100644
index 00000000000..5a058c6826d
--- /dev/null
+++ b/tests/ui/impl-trait/precise-capturing/self-capture.stderr
@@ -0,0 +1,11 @@
+warning: the feature `precise_capturing` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/self-capture.rs:3:12
+   |
+LL | #![feature(precise_capturing)]
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+