Auto merge of #123377 - oli-obk:private_projection, r=compiler-errors
Only inspect user-written predicates for privacy concerns fixes #123288 Previously we looked at the elaborated predicates, which, due to adding various bounds on fields, end up requiring trivially true bounds. But these bounds can contain private types, which the privacy visitor then found and errored about.
This commit is contained in:
commit
0fd571286e
2 changed files with 44 additions and 5 deletions
|
@ -13,6 +13,7 @@ pub trait SpannedTypeVisitor<'tcx> {
|
|||
fn visit(&mut self, span: Span, value: impl TypeVisitable<TyCtxt<'tcx>>) -> Self::Result;
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(tcx, visitor))]
|
||||
pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
item: LocalDefId,
|
||||
|
@ -36,7 +37,7 @@ pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
|||
for (hir, ty) in hir_sig.inputs.iter().zip(ty_sig.inputs().iter()) {
|
||||
try_visit!(visitor.visit(hir.span, ty.map_bound(|x| *x)));
|
||||
}
|
||||
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
|
||||
for (pred, span) in tcx.explicit_predicates_of(item).instantiate_identity(tcx) {
|
||||
try_visit!(visitor.visit(span, pred));
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +55,7 @@ pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
|||
// Associated types in traits don't necessarily have a type that we can visit
|
||||
try_visit!(visitor.visit(ty.span, tcx.type_of(item).instantiate_identity()));
|
||||
}
|
||||
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
|
||||
for (pred, span) in tcx.explicit_predicates_of(item).instantiate_identity(tcx) {
|
||||
try_visit!(visitor.visit(span, pred));
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +77,7 @@ pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
|||
let ty = field.ty(tcx, args);
|
||||
try_visit!(visitor.visit(span, ty));
|
||||
}
|
||||
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
|
||||
for (pred, span) in tcx.explicit_predicates_of(item).instantiate_identity(tcx) {
|
||||
try_visit!(visitor.visit(span, pred));
|
||||
}
|
||||
}
|
||||
|
@ -95,12 +96,12 @@ pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
|||
_ => tcx.def_span(item),
|
||||
};
|
||||
try_visit!(visitor.visit(span, tcx.type_of(item).instantiate_identity()));
|
||||
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
|
||||
for (pred, span) in tcx.explicit_predicates_of(item).instantiate_identity(tcx) {
|
||||
try_visit!(visitor.visit(span, pred));
|
||||
}
|
||||
}
|
||||
DefKind::TraitAlias | DefKind::Trait => {
|
||||
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
|
||||
for (pred, span) in tcx.explicit_predicates_of(item).instantiate_identity(tcx) {
|
||||
try_visit!(visitor.visit(span, pred));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue