File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed
tests/ui/traits/new-solver Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ // check-pass
2
+
3
+ // This test verifies that negative trait predicate cannot be satisfied from a
4
+ // positive param-env candidate.
5
+
6
+ // Negative coherence is one of the only places where we actually construct and
7
+ // evaluate negative predicates. Specifically, when verifying whether the first
8
+ // and second impls below overlap, we do not want to consider them disjoint,
9
+ // otherwise the second impl would be missing an associated type `type Item`
10
+ // which is provided by the first impl that it is specializing.
11
+
12
+ #![ feature( specialization) ]
13
+ //~^ WARN the feature `specialization` is incomplete
14
+ #![ feature( with_negative_coherence) ]
15
+
16
+ trait BoxIter {
17
+ type Item ;
18
+
19
+ fn last ( self ) -> Option < Self :: Item > ;
20
+ }
21
+
22
+ impl < I : Iterator + ?Sized > BoxIter for Box < I > {
23
+ type Item = I :: Item ;
24
+
25
+ default fn last ( self ) -> Option < I :: Item > {
26
+ todo ! ( )
27
+ }
28
+ }
29
+
30
+ // When checking that this impl does/doesn't overlap the one above, we evaluate
31
+ // a negative version of all of the where-clause predicates of the impl below.
32
+ // For `I: !Iterator`, we should make sure that the param-env clause `I: Iterator`
33
+ // from above doesn't satisfy this predicate.
34
+ impl < I : Iterator > BoxIter for Box < I > {
35
+ fn last ( self ) -> Option < I :: Item > {
36
+ ( * self ) . last ( )
37
+ }
38
+ }
39
+
40
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
2
+ --> $DIR/negative-coherence-bounds.rs:12:12
3
+ |
4
+ LL | #![feature(specialization)]
5
+ | ^^^^^^^^^^^^^^
6
+ |
7
+ = note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
8
+ = help: consider using `min_specialization` instead, which is more stable and complete
9
+ = note: `#[warn(incomplete_features)]` on by default
10
+
11
+ warning: 1 warning emitted
12
+
You can’t perform that action at this time.
0 commit comments