File tree Expand file tree Collapse file tree 3 files changed +40
-1
lines changed
test/ui/type-alias-impl-trait Expand file tree Collapse file tree 3 files changed +40
-1
lines changed Original file line number Diff line number Diff line change @@ -1467,7 +1467,7 @@ fn assoc_ty_def(
14671467 // cycle error if the specialization graph is currently being built.
14681468 let impl_node = specialization_graph:: Node :: Impl ( impl_def_id) ;
14691469 for item in impl_node. items ( tcx) {
1470- if item. kind == ty:: AssocKind :: Type
1470+ if matches ! ( item. kind, ty:: AssocKind :: Type | ty :: AssocKind :: OpaqueTy )
14711471 && tcx. hygienic_eq ( item. ident , assoc_ty_name, trait_def_id)
14721472 {
14731473 return specialization_graph:: NodeItem {
Original file line number Diff line number Diff line change 1+ // Regression test for issue 67856
2+
3+ #![ feature( unboxed_closures) ]
4+ #![ feature( type_alias_impl_trait) ]
5+ #![ feature( fn_traits) ]
6+
7+ trait MyTrait { }
8+ impl MyTrait for ( ) { }
9+
10+ impl < F > FnOnce < ( ) > for & F {
11+ //~^ ERROR conflicting implementations
12+ //~| ERROR type parameter `F` must be used
13+ type Output = impl MyTrait ;
14+ extern "rust-call" fn call_once ( self , _: ( ) ) -> Self :: Output { }
15+ }
16+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error[E0119]: conflicting implementations of trait `std::ops::FnOnce<()>` for type `&_`:
2+ --> $DIR/incoherent-assoc-imp-trait.rs:10:1
3+ |
4+ LL | impl<F> FnOnce<()> for &F {
5+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
6+ |
7+ = note: conflicting implementation in crate `core`:
8+ - impl<A, F> std::ops::FnOnce<A> for &F
9+ where F: std::ops::Fn<A>, F: ?Sized;
10+
11+ error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct<F>`)
12+ --> $DIR/incoherent-assoc-imp-trait.rs:10:6
13+ |
14+ LL | impl<F> FnOnce<()> for &F {
15+ | ^ type parameter `F` must be used as the type parameter for some local type
16+ |
17+ = note: implementing a foreign trait is only possible if at least one of the types for which is it implemented is local
18+ = note: only traits defined in the current crate can be implemented for a type parameter
19+
20+ error: aborting due to 2 previous errors
21+
22+ Some errors have detailed explanations: E0119, E0210.
23+ For more information about an error, try `rustc --explain E0119`.
You can’t perform that action at this time.
0 commit comments