From 02a40e83b217e281e7d2928cf1ce1560f6f7c219 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Sat, 27 Apr 2019 20:33:03 -0400 Subject: [PATCH] Don't try to render auto-trait bounds with any inference variables Previously, we checked if the target of a projection type was itself an inference variable. However, for Rustdoc rendering purposes, there's no distinction between an inference variable ('_') and a type containing one (e.g. (MyStruct)) - we don't want to render either of them. Fixes #60269 Due to the complexity of the original bug, which spans three different crates (hyper, tower-hyper, and tower), I have been unable to create a minimized reproduction for the issue. --- src/librustc/traits/auto_trait.rs | 2 +- src/librustdoc/clean/mod.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librustc/traits/auto_trait.rs b/src/librustc/traits/auto_trait.rs index e93351197fe47..03ce06a436415 100644 --- a/src/librustc/traits/auto_trait.rs +++ b/src/librustc/traits/auto_trait.rs @@ -712,7 +712,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { // Additionally, we check if we've seen this predicate before, // to avoid rendering duplicate bounds to the user. if self.is_param_no_infer(p.skip_binder().projection_ty.substs) - && !p.ty().skip_binder().is_ty_infer() + && !p.ty().skip_binder().has_infer_types() && is_new_pred { debug!("evaluate_nested_obligations: adding projection predicate\ to computed_preds: {:?}", predicate); diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 81e4905890d45..27aec5197da87 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2945,6 +2945,7 @@ impl Clean for hir::Ty { impl<'tcx> Clean for Ty<'tcx> { fn clean(&self, cx: &DocContext<'_>) -> Type { + debug!("cleaning type: {:?}", self); match self.sty { ty::Never => Never, ty::Bool => Primitive(PrimitiveType::Bool),