diff options
author | bors <bors@rust-lang.org> | 2021-10-23 12:51:15 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2021-10-23 12:51:15 +0000 |
commit | aa5740c715001f981515ed46faaddebf67cb9539 (patch) | |
tree | 68687408faa98d4127cd5b297a543a83f13262eb /tests/codegen/src-hash-algorithm/src-hash-algorithm-sha1.rs | |
parent | 55ccbd090d96ec3bb28dbcb383e65bbfa3c293ff (diff) | |
parent | 3287f72d39df22a4672527f8f97a771d11071a6c (diff) | |
download | rust-aa5740c715001f981515ed46faaddebf67cb9539.tar.gz |
Auto merge of #90104 - spastorino:coherence-for-negative-trait, r=nikomatsakis
Implement coherence checks for negative trait impls
The main purpose of this PR is to be able to [move Error trait to core](https://github.com/rust-lang/project-error-handling/issues/3).
This feature is necessary to handle the following from impl on box.
```rust
impl From<&str> for Box<dyn Error> { ... }
```
Without having negative traits affect coherence moving the error trait into `core` and moving that `From` impl to `alloc` will cause the from impl to no longer compiler because of a potential future incompatibility. The compiler indicates that `&str` _could_ introduce an `Error` impl in the future, and thus prevents the `From` impl in `alloc` that would cause overlap with `From<E: Error> for Box<dyn Error>`. Adding `impl !Error for &str {}` with the negative trait coherence feature will disable this error by encoding a stability guarantee that `&str` will never implement `Error`, making the `From` impl compile.
We would have this in `alloc`:
```rust
impl From<&str> for Box<dyn Error> {} // A
impl<E> From<E> for Box<dyn Error> where E: Error {} // B
```
and this in `core`:
```rust
trait Error {}
impl !Error for &str {}
```
r? `@nikomatsakis`
This PR was built on top of `@yaahc` PR #85764.
Language team proposal: to https://github.com/rust-lang/lang-team/issues/96
Diffstat (limited to 'tests/codegen/src-hash-algorithm/src-hash-algorithm-sha1.rs')
0 files changed, 0 insertions, 0 deletions