From 3f2574e8bad436a01a2cb7ea1b054f457bba5f0d Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Fri, 13 Oct 2023 19:47:40 +0000 Subject: [PATCH] Test that RPITITs have RPIT scope and not impl-wide scope --- .../in-trait/sibling-function-constraint.rs | 21 +++++++++++++++++++ .../sibling-function-constraint.stderr | 17 +++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/ui/impl-trait/in-trait/sibling-function-constraint.rs create mode 100644 tests/ui/impl-trait/in-trait/sibling-function-constraint.stderr diff --git a/tests/ui/impl-trait/in-trait/sibling-function-constraint.rs b/tests/ui/impl-trait/in-trait/sibling-function-constraint.rs new file mode 100644 index 00000000000..fe162e6cf80 --- /dev/null +++ b/tests/ui/impl-trait/in-trait/sibling-function-constraint.rs @@ -0,0 +1,21 @@ +// Checks that a sibling function (i.e. `foo`) cannot constrain +// an RPITIT from another function (`bar`). + +trait Trait { + fn foo(); + + fn bar() -> impl Sized; +} + +impl Trait for () { + fn foo() { + let _: String = Self::bar(); + //~^ ERROR mismatched types + } + + fn bar() -> impl Sized { + loop {} + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/in-trait/sibling-function-constraint.stderr b/tests/ui/impl-trait/in-trait/sibling-function-constraint.stderr new file mode 100644 index 00000000000..729963a8141 --- /dev/null +++ b/tests/ui/impl-trait/in-trait/sibling-function-constraint.stderr @@ -0,0 +1,17 @@ +error[E0308]: mismatched types + --> $DIR/sibling-function-constraint.rs:12:25 + | +LL | let _: String = Self::bar(); + | ------ ^^^^^^^^^^^ expected `String`, found opaque type + | | + | expected due to this +... +LL | fn bar() -> impl Sized { + | ---------- the found opaque type + | + = note: expected struct `String` + found opaque type `impl Sized` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`.