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 @@ -1461,7 +1461,7 @@ fn assoc_ty_def(
14611461 // cycle error if the specialization graph is currently being built.
14621462 let impl_node = specialization_graph:: Node :: Impl ( impl_def_id) ;
14631463 for item in impl_node. items ( tcx) {
1464- if item. kind == ty:: AssocKind :: Type
1464+ if matches ! ( item. kind, ty:: AssocKind :: Type | ty :: AssocKind :: OpaqueTy )
14651465 && tcx. hygienic_eq ( item. ident , assoc_ty_name, trait_def_id)
14661466 {
14671467 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