File tree Expand file tree Collapse file tree 3 files changed +85
-0
lines changed
src/test/ui/const-generics Expand file tree Collapse file tree 3 files changed +85
-0
lines changed Original file line number Diff line number Diff line change 1+ warning: conflicting implementations of trait `SadBee` for type `for<'a> fn(&'a ())`
2+ --> $DIR/invariant.rs:14:1
3+ |
4+ LL | impl SadBee for for<'a> fn(&'a ()) {
5+ | ---------------------------------- first implementation here
6+ ...
7+ LL | impl SadBee for fn(&'static ()) {
8+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `for<'a> fn(&'a ())`
9+ |
10+ = note: `#[warn(coherence_leak_check)]` on by default
11+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
12+ = note: for more information, see issue #56105 <https://github.com/rust-lang/rust/issues/56105>
13+ = note: this behavior recently changed as a result of a bug fix; see rust-lang/rust#56105 for details
14+
15+ error[E0308]: mismatched types
16+ --> $DIR/invariant.rs:27:5
17+ |
18+ LL | v
19+ | ^ one type is more general than the other
20+ |
21+ = note: expected reference `&Foo<fn(&())>`
22+ found reference `&Foo<for<'a> fn(&'a ())>`
23+
24+ error: aborting due to previous error; 1 warning emitted
25+
26+ For more information about this error, try `rustc --explain E0308`.
Original file line number Diff line number Diff line change 1+ #![ feature( generic_const_exprs) ]
2+ #![ allow( incomplete_features) ]
3+ use std:: marker:: PhantomData ;
4+
5+ trait SadBee {
6+ const ASSOC : usize ;
7+ }
8+ // fn(&'static ())` is a supertype of `for<'a> fn(&'a ())` while
9+ // we allow two different impls for these types, leading
10+ // to different const eval results.
11+ impl SadBee for for <' a > fn ( & ' a ( ) ) {
12+ const ASSOC : usize = 0 ;
13+ }
14+ impl SadBee for fn ( & ' static ( ) ) {
15+ //~^ WARNING conflicting implementations of trait
16+ //~| WARNING this was previously accepted
17+ const ASSOC : usize = 100 ;
18+ }
19+
20+ struct Foo < T : SadBee > ( [ u8 ; <T as SadBee >:: ASSOC ] , PhantomData < T > )
21+ where
22+ [ ( ) ; <T as SadBee >:: ASSOC ] : ;
23+
24+ fn covariant (
25+ v : & ' static Foo < for <' a > fn ( & ' a ( ) ) >
26+ ) -> & ' static Foo < fn ( & ' static ( ) ) > {
27+ v //~ ERROR mismatched types
28+ }
29+
30+ fn main ( ) {
31+ let y = covariant ( & Foo ( [ ] , PhantomData ) ) ;
32+ println ! ( "{:?}" , y. 0 ) ;
33+ }
Original file line number Diff line number Diff line change 1+ warning: conflicting implementations of trait `SadBee` for type `for<'a> fn(&'a ())`
2+ --> $DIR/invariant.rs:14:1
3+ |
4+ LL | impl SadBee for for<'a> fn(&'a ()) {
5+ | ---------------------------------- first implementation here
6+ ...
7+ LL | impl SadBee for fn(&'static ()) {
8+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `for<'a> fn(&'a ())`
9+ |
10+ = note: `#[warn(coherence_leak_check)]` on by default
11+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
12+ = note: for more information, see issue #56105 <https://github.com/rust-lang/rust/issues/56105>
13+ = note: this behavior recently changed as a result of a bug fix; see rust-lang/rust#56105 for details
14+
15+ error[E0308]: mismatched types
16+ --> $DIR/invariant.rs:27:5
17+ |
18+ LL | v
19+ | ^ one type is more general than the other
20+ |
21+ = note: expected reference `&'static Foo<fn(&'static ())>`
22+ found reference `&'static Foo<for<'a> fn(&'a ())>`
23+
24+ error: aborting due to previous error; 1 warning emitted
25+
26+ For more information about this error, try `rustc --explain E0308`.
You can’t perform that action at this time.
0 commit comments