1
Fork 0

fix(rustc_typeck): produce better errors for dyn auto trait

Fixes #85026
This commit is contained in:
Michael Howell 2021-08-30 22:11:25 -07:00
parent 56ea5e0ee9
commit 026322c34b
5 changed files with 71 additions and 0 deletions

View file

@ -480,6 +480,7 @@ E0781: include_str!("./error_codes/E0781.md"),
E0782: include_str!("./error_codes/E0782.md"),
E0783: include_str!("./error_codes/E0783.md"),
E0784: include_str!("./error_codes/E0784.md"),
E0785: include_str!("./error_codes/E0785.md"),
;
// E0006, // merged with E0005
// E0008, // cannot bind by-move into a pattern guard

View file

@ -0,0 +1,30 @@
An inherent `impl` was written on a dyn auto trait.
Erroneous code example:
```compile_fail,E0785
#![feature(auto_traits)]
auto trait AutoTrait {}
impl dyn AutoTrait {}
```
Dyn objects allow any number of auto traits, plus at most one non-auto trait.
The non-auto trait becomes the "principal trait".
When checking if an impl on a dyn trait is coherent, the principal trait is
normally the only one considered. Since the erroneous code has no principal
trait, it cannot be implemented at all.
Working example:
```
#![feature(auto_traits)]
trait PrincipalTrait {}
auto trait AutoTrait {}
impl dyn (PrincipalTrait + AutoTrait + Send) {}
```