Skip to content

Commit 751dcac

Browse files
Rollup merge of #113427 - compiler-errors:no-variances-of-rpitit-gat, r=spastorino
Remove `variances_of` on RPITIT GATs, remove its one use-case It doesn't make sense to implement variances on a GAT anyways, since we don't relate GATs with variance: https://github.com/rust-lang/rust/blob/85bf07972a1041b9e25393b803d0e006bec3eaaf/compiler/rustc_middle/src/ty/relate.rs#L569-L579 r? ``@spastorino``
2 parents a13b57e + ca8202d commit 751dcac

File tree

2 files changed

+3
-20
lines changed

2 files changed

+3
-20
lines changed

compiler/rustc_hir_analysis/src/variance/mod.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rustc_arena::DroplessArena;
77
use rustc_hir::def::DefKind;
88
use rustc_hir::def_id::{DefId, LocalDefId};
99
use rustc_middle::query::Providers;
10-
use rustc_middle::ty::{self, CrateVariancesMap, ImplTraitInTraitData, SubstsRef, Ty, TyCtxt};
10+
use rustc_middle::ty::{self, CrateVariancesMap, SubstsRef, Ty, TyCtxt};
1111
use rustc_middle::ty::{TypeSuperVisitable, TypeVisitable};
1212
use std::ops::ControlFlow;
1313

@@ -59,13 +59,6 @@ fn variances_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[ty::Variance] {
5959
DefKind::OpaqueTy | DefKind::ImplTraitPlaceholder => {
6060
return variance_of_opaque(tcx, item_def_id);
6161
}
62-
DefKind::AssocTy => {
63-
if let Some(ImplTraitInTraitData::Trait { .. }) =
64-
tcx.opt_rpitit_info(item_def_id.to_def_id())
65-
{
66-
return variance_of_opaque(tcx, item_def_id);
67-
}
68-
}
6962
_ => {}
7063
}
7164

@@ -125,7 +118,8 @@ fn variance_of_opaque(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[ty::Varianc
125118
// FIXME(-Zlower-impl-trait-in-trait-to-assoc-ty) check whether this is necessary
126119
// at all for RPITITs.
127120
ty::Alias(_, ty::AliasTy { def_id, substs, .. })
128-
if self.tcx.is_impl_trait_in_trait(*def_id) =>
121+
if self.tcx.is_impl_trait_in_trait(*def_id)
122+
&& !self.tcx.lower_impl_trait_in_trait_to_assoc_ty() =>
129123
{
130124
self.visit_opaque(*def_id, substs)
131125
}

compiler/rustc_infer/src/infer/opaque_types.rs

-11
Original file line numberDiff line numberDiff line change
@@ -473,17 +473,6 @@ where
473473
}
474474
}
475475

476-
ty::Alias(ty::Projection, proj) if self.tcx.is_impl_trait_in_trait(proj.def_id) => {
477-
// Skip lifetime parameters that are not captures.
478-
let variances = self.tcx.variances_of(proj.def_id);
479-
480-
for (v, s) in std::iter::zip(variances, proj.substs.iter()) {
481-
if *v != ty::Variance::Bivariant {
482-
s.visit_with(self);
483-
}
484-
}
485-
}
486-
487476
_ => {
488477
ty.super_visit_with(self);
489478
}

0 commit comments

Comments
 (0)