From ab766f0511fa0a735997b2a442744af71d8e6be0 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Wed, 5 Aug 2020 20:19:56 -0400 Subject: Handle projection predicates in the param env for auto-trait docs Fixes #72213 Any predicates in the param env are guaranteed to hold, so we don't need to do any additional processing of them if we come across them as sub-obligations of a different predicate. This allows us to avoid adding the same predicate to the computed ParamEnv multiple times (but with different regions each time), which causes an ambiguity error during fulfillment. --- .../issue-72213-projection-lifetime.rs | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/test/rustdoc/synthetic_auto/issue-72213-projection-lifetime.rs (limited to 'src/test/rustdoc') diff --git a/src/test/rustdoc/synthetic_auto/issue-72213-projection-lifetime.rs b/src/test/rustdoc/synthetic_auto/issue-72213-projection-lifetime.rs new file mode 100644 index 00000000000..6f66b8e5563 --- /dev/null +++ b/src/test/rustdoc/synthetic_auto/issue-72213-projection-lifetime.rs @@ -0,0 +1,25 @@ +// Regression test for issue #72213 +// Tests that we don't ICE when we have projection predicates +// in our initial ParamEnv + +pub struct Lines<'a, L> +where + L: Iterator, +{ + words: std::iter::Peekable>, +} + +pub struct Words<'a, L> { + _m: std::marker::PhantomData<&'a L>, +} + +impl<'a, L> Iterator for Words<'a, L> +where + L: Iterator, +{ + type Item = (); + + fn next(&mut self) -> Option { + unimplemented!() + } +} -- cgit 1.4.1-3-g733a5