From 218caa410aa38c29984be31a5229b9fa717560ee Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:13 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- .../extended/lending_iterator.base.stderr | 12 +++++++ .../extended/lending_iterator.rs | 38 ++++++++++++++++++++++ .../extended/lending_iterator_2.base.stderr | 12 +++++++ .../extended/lending_iterator_2.rs | 30 +++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 tests/ui/generic-associated-types/extended/lending_iterator.base.stderr create mode 100644 tests/ui/generic-associated-types/extended/lending_iterator.rs create mode 100644 tests/ui/generic-associated-types/extended/lending_iterator_2.base.stderr create mode 100644 tests/ui/generic-associated-types/extended/lending_iterator_2.rs (limited to 'tests/ui/generic-associated-types/extended') diff --git a/tests/ui/generic-associated-types/extended/lending_iterator.base.stderr b/tests/ui/generic-associated-types/extended/lending_iterator.base.stderr new file mode 100644 index 000000000..614c4a34c --- /dev/null +++ b/tests/ui/generic-associated-types/extended/lending_iterator.base.stderr @@ -0,0 +1,12 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/lending_iterator.rs:13:45 + | +LL | fn from_iter LendingIterator = A>>(iter: T) -> Self; + | ------------------------------------------------------------------------ definition of `from_iter` from trait +... +LL | fn from_iter LendingIterator = A>>(mut iter: I) -> Self { + | ^^^^^^^^^^^^ impl has extra requirement `I: 'x` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0276`. diff --git a/tests/ui/generic-associated-types/extended/lending_iterator.rs b/tests/ui/generic-associated-types/extended/lending_iterator.rs new file mode 100644 index 000000000..247761dd0 --- /dev/null +++ b/tests/ui/generic-associated-types/extended/lending_iterator.rs @@ -0,0 +1,38 @@ +// revisions: base extended +//[base] check-fail +//[extended] check-pass + +#![cfg_attr(extended, feature(generic_associated_types_extended))] +#![cfg_attr(extended, allow(incomplete_features))] + +pub trait FromLendingIterator: Sized { + fn from_iter LendingIterator = A>>(iter: T) -> Self; +} + +impl FromLendingIterator for Vec { + fn from_iter LendingIterator = A>>(mut iter: I) -> Self { + //[base]~^ impl has stricter + let mut v = vec![]; + while let Some(item) = iter.next() { + v.push(item); + } + v + } +} + +pub trait LendingIterator { + type Item<'z> + where + Self: 'z; + fn next(&mut self) -> Option>; + + fn collect>(self) -> B + where + Self: Sized, + Self: for<'q> LendingIterator = A>, + { + >::from_iter(self) + } +} + +fn main() {} diff --git a/tests/ui/generic-associated-types/extended/lending_iterator_2.base.stderr b/tests/ui/generic-associated-types/extended/lending_iterator_2.base.stderr new file mode 100644 index 000000000..f6b0b644e --- /dev/null +++ b/tests/ui/generic-associated-types/extended/lending_iterator_2.base.stderr @@ -0,0 +1,12 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/lending_iterator_2.rs:13:45 + | +LL | fn from_iter LendingIterator = A>>(iter: T) -> Self; + | ------------------------------------------------------------------------ definition of `from_iter` from trait +... +LL | fn from_iter LendingIterator = A>>(mut iter: I) -> Self { + | ^^^^^^^^^^^^ impl has extra requirement `I: 'x` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0276`. diff --git a/tests/ui/generic-associated-types/extended/lending_iterator_2.rs b/tests/ui/generic-associated-types/extended/lending_iterator_2.rs new file mode 100644 index 000000000..eb9c0456a --- /dev/null +++ b/tests/ui/generic-associated-types/extended/lending_iterator_2.rs @@ -0,0 +1,30 @@ +// revisions: base extended +//[base] check-fail +//[extended] check-pass + +#![cfg_attr(extended, feature(generic_associated_types_extended))] +#![cfg_attr(extended, allow(incomplete_features))] + +pub trait FromLendingIterator: Sized { + fn from_iter LendingIterator = A>>(iter: T) -> Self; +} + +impl FromLendingIterator for Vec { + fn from_iter LendingIterator = A>>(mut iter: I) -> Self { + //[base]~^ impl has stricter + let mut v = vec![]; + while let Some(item) = iter.next() { + v.push(item); + } + v + } +} + +pub trait LendingIterator { + type Item<'a> + where + Self: 'a; + fn next(&mut self) -> Option>; +} + +fn main() {} -- cgit v1.2.3