rust/src/test/ui/variance
Matthias Krüger 2b874f0242
Rollup merge of #89829 - voidc:assoc-const-variance, r=lcnr
Consider types appearing in const expressions to be invariant

This is an approach to fix #80977.
Currently, a type parameter which is only used in a constant expression is considered bivariant and will trigger error E0392 *"parameter T is never used"*.
Here is a short example:

```rust
pub trait Foo {
    const N: usize;
}

struct Bar<T: Foo>([u8; T::N])
where [(); T::N]:;
```
([playgound](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2015&gist=b51a272853f75925e72efc1597478aa5))

While it is possible to silence this error by adding a `PhantomData<T>` field, I think the better solution would be to make `T` invariant.
This would be analogous to the invariance constraints added for associated types.
However, I'm quite new to the compiler and unsure whether this is the right approach.

r? ``@varkor`` (since you authored #60058)
2021-10-23 14:58:41 +02:00
..
variance-associated-consts.rs Add UI test for the variance of types appearing in consts 2021-10-12 21:50:44 +02:00
variance-associated-consts.stderr Add UI test for the variance of types appearing in consts 2021-10-12 21:50:44 +02:00
variance-associated-types.rs
variance-associated-types.stderr
variance-associated-types2.nll.stderr Don't suggest replacing region with 'static in NLL 2021-10-03 21:53:48 -05:00
variance-associated-types2.rs
variance-associated-types2.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-btree-invariant-types.nll.stderr Don't suggest replacing region with 'static in NLL 2021-10-03 21:53:48 -05:00
variance-btree-invariant-types.rs BTree: encapsulate LeafRange better & some debug asserts 2021-06-09 12:03:07 +02:00
variance-btree-invariant-types.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-cell-is-invariant.nll.stderr
variance-cell-is-invariant.rs
variance-cell-is-invariant.stderr
variance-contravariant-arg-object.nll.stderr
variance-contravariant-arg-object.rs
variance-contravariant-arg-object.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-contravariant-arg-trait-match.nll.stderr
variance-contravariant-arg-trait-match.rs
variance-contravariant-arg-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-contravariant-self-trait-match.nll.stderr
variance-contravariant-self-trait-match.rs
variance-contravariant-self-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-covariant-arg-object.nll.stderr
variance-covariant-arg-object.rs
variance-covariant-arg-object.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-covariant-arg-trait-match.nll.stderr
variance-covariant-arg-trait-match.rs
variance-covariant-arg-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-covariant-self-trait-match.nll.stderr
variance-covariant-self-trait-match.rs
variance-covariant-self-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-invariant-arg-object.nll.stderr
variance-invariant-arg-object.rs
variance-invariant-arg-object.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-invariant-arg-trait-match.nll.stderr
variance-invariant-arg-trait-match.rs
variance-invariant-arg-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-invariant-self-trait-match.nll.stderr
variance-invariant-self-trait-match.rs
variance-invariant-self-trait-match.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-issue-20533.rs
variance-issue-20533.stderr
variance-object-types.rs
variance-object-types.stderr
variance-regions-direct.rs
variance-regions-direct.stderr
variance-regions-indirect.rs
variance-regions-indirect.stderr
variance-regions-unused-direct.rs
variance-regions-unused-direct.stderr
variance-regions-unused-indirect.rs
variance-regions-unused-indirect.stderr
variance-trait-bounds.rs
variance-trait-bounds.stderr
variance-trait-matching.nll.stderr
variance-trait-matching.rs
variance-trait-matching.stderr
variance-trait-object-bound.rs
variance-trait-object-bound.stderr
variance-types-bounds.rs
variance-types-bounds.stderr
variance-types.rs
variance-types.stderr
variance-unused-region-param.rs
variance-unused-region-param.stderr
variance-unused-type-param.rs
variance-unused-type-param.stderr
variance-use-contravariant-struct-1.nll.stderr
variance-use-contravariant-struct-1.rs
variance-use-contravariant-struct-1.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-use-contravariant-struct-2.rs
variance-use-covariant-struct-1.nll.stderr
variance-use-covariant-struct-1.rs
variance-use-covariant-struct-1.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00
variance-use-covariant-struct-2.rs
variance-use-invariant-struct-1.nll.stderr
variance-use-invariant-struct-1.rs
variance-use-invariant-struct-1.stderr Remove textual span from diagnostic string 2021-10-13 10:53:44 +00:00