rust/src
bors 0cc541e4b2 Auto merge of #108860 - oli-obk:tait_alias, r=compiler-errors
Add `AliasKind::Weak` for type aliases.

`type Foo<T: Debug> = Bar<T>;` does not check `T: Debug` at use sites of `Foo<NotDebug>`, because in contrast to a

```rust
trait Identity {
    type Identity;
}
impl<T: Debug> Identity for T {
    type Identity = T;
}
<NotDebug as Identity>::Identity
```

type aliases do not exist in the type system, but are expanded to their aliased type immediately when going from HIR to the type layer.

Similarly:

* a private type alias for a public type is a completely fine thing, even though it makes it a bit hard to write out complex times sometimes
* rustdoc expands the type alias, even though often times users use them for documentation purposes
* diagnostics show the expanded type, which is confusing if the user wrote a type alias and the diagnostic talks about another type that they don't know about.

For type alias impl trait, these issues do not actually apply in most cases, but sometimes you have a type alias impl trait like `type Foo<T: Debug> = (impl Debug, Bar<T>);`, which only really checks it for `impl Debug`, but by accident prevents `Bar<T>` from only being instantiated after proving `T: Debug`. This PR makes sure that we always check these bounds explicitly and don't rely on an implementation accident.

To not break all the type aliases out there, we only use it when the type alias contains an opaque type. We can decide to do this for all type aliases over an edition.

Or we can later extend this to more types if we figure out the back-compat concerns with suddenly checking such bounds.

As a side effect, easily allows fixing https://github.com/rust-lang/rust/issues/108617, which I did.

fixes https://github.com/rust-lang/rust/issues/108617
2023-06-17 00:33:29 +00:00
..
bootstrap Merge msvc-1/2 CI jobs 2023-06-14 23:07:49 +02:00
ci Rollup merge of #112664 - djkoloski:fuchsia_test_runner_tmpdir, r=tmandry 2023-06-15 22:04:58 +02:00
doc Rollup merge of #112304 - GuillaumeGomez:re-exports, r=notriddle 2023-06-15 17:52:36 +02:00
etc Rollup merge of #111962 - theIDinside:better-gdb, r=Mark-Simulacrum 2023-06-06 12:00:32 +02:00
librustdoc Auto merge of #108860 - oli-obk:tait_alias, r=compiler-errors 2023-06-17 00:33:29 +00:00
llvm-project@22897bce7b Update to LLVM 16.0.5 2023-06-05 14:19:09 +02:00
rustdoc-json-types Verify that ItemEnum can be serialized and then deserialized using bincode 2023-05-22 18:26:20 +01:00
tools Auto merge of #108860 - oli-obk:tait_alias, r=compiler-errors 2023-06-17 00:33:29 +00:00
README.md Remove stale reference to the test suite location 2023-01-13 11:49:06 +00:00
stage0.json Bump to latest beta compiler 2023-05-30 08:00:10 -04:00
version Bump to 1.72.0 2023-05-27 14:23:37 -04:00

This directory contains some source code for the Rust project, including:

  • The bootstrapping build system
  • Various submodules for tools, like cargo, tidy, etc.

For more information on how various parts of the compiler work, see the rustc dev guide.