diff options
| author | León Orell Valerian Liehr <me@fmease.dev> | 2025-02-26 04:15:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-26 04:15:08 +0100 |
| commit | cf8498d36a614bb2ac669fb43303b0662e9b5225 (patch) | |
| tree | 6efb91db231c2e82785d8a261749af2f41e09a9a | |
| parent | a82ad9494cd7be42dd1579de2436e4e3c38d819e (diff) | |
| parent | 0bed12e02d75f9d786a3496cb243355e603809ad (diff) | |
| download | rust-cf8498d36a614bb2ac669fb43303b0662e9b5225.tar.gz rust-cf8498d36a614bb2ac669fb43303b0662e9b5225.zip | |
Rollup merge of #137613 - davidtwco:const-traits-variances, r=compiler-errors
hir_analysis: skip self type of host effect preds in variances_of Discovered as part of an implementation of rust-lang/rfcs#3729 - w/out this then when introducing const trait bounds: many more interesting tests change with different output, missing errors, new errors, etc related to this but they all depend on feature flags and are much more complex than this test. r? ``@oli-obk``
| -rw-r--r-- | compiler/rustc_hir_analysis/src/variance/mod.rs | 4 | ||||
| -rw-r--r-- | tests/ui/traits/const-traits/variance.rs | 13 | ||||
| -rw-r--r-- | tests/ui/traits/const-traits/variance.stderr | 8 |
3 files changed, 25 insertions, 0 deletions
diff --git a/compiler/rustc_hir_analysis/src/variance/mod.rs b/compiler/rustc_hir_analysis/src/variance/mod.rs index a7760326bb4..0800d99e945 100644 --- a/compiler/rustc_hir_analysis/src/variance/mod.rs +++ b/compiler/rustc_hir_analysis/src/variance/mod.rs @@ -198,6 +198,10 @@ fn variance_of_opaque( ty::ClauseKind::Trait(ty::TraitPredicate { trait_ref: ty::TraitRef { def_id: _, args, .. }, polarity: _, + }) + | ty::ClauseKind::HostEffect(ty::HostEffectPredicate { + trait_ref: ty::TraitRef { def_id: _, args, .. }, + constness: _, }) => { for arg in &args[1..] { arg.visit_with(&mut collector); diff --git a/tests/ui/traits/const-traits/variance.rs b/tests/ui/traits/const-traits/variance.rs new file mode 100644 index 00000000000..90b5c50161d --- /dev/null +++ b/tests/ui/traits/const-traits/variance.rs @@ -0,0 +1,13 @@ +#![feature(rustc_attrs, const_trait_impl)] +#![allow(internal_features)] +#![rustc_variance_of_opaques] + +#[const_trait] +trait Foo {} + +impl const Foo for () {} + +fn foo<'a: 'a>() -> impl const Foo {} +//~^ ERROR ['a: *] + +fn main() {} diff --git a/tests/ui/traits/const-traits/variance.stderr b/tests/ui/traits/const-traits/variance.stderr new file mode 100644 index 00000000000..f5506931184 --- /dev/null +++ b/tests/ui/traits/const-traits/variance.stderr @@ -0,0 +1,8 @@ +error: ['a: *] + --> $DIR/variance.rs:10:21 + | +LL | fn foo<'a: 'a>() -> impl const Foo {} + | ^^^^^^^^^^^^^^ + +error: aborting due to 1 previous error + |
