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(
1461
1461
// cycle error if the specialization graph is currently being built.
1462
1462
let impl_node = specialization_graph:: Node :: Impl ( impl_def_id) ;
1463
1463
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 )
1465
1465
&& tcx. hygienic_eq ( item. ident , assoc_ty_name, trait_def_id)
1466
1466
{
1467
1467
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