From 933f9ebaae36c15ac917142033ec5f80e066d119 Mon Sep 17 00:00:00 2001 From: "leonardo.yvens" Date: Thu, 5 Apr 2018 15:21:56 -0300 Subject: [PATCH] Fix #49344 --- src/librustc_typeck/check/wfcheck.rs | 12 +++++++++--- src/test/run-pass/defaults-well-formedness.rs | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/librustc_typeck/check/wfcheck.rs b/src/librustc_typeck/check/wfcheck.rs index 406ff9463a0..7dc73a1d5f0 100644 --- a/src/librustc_typeck/check/wfcheck.rs +++ b/src/librustc_typeck/check/wfcheck.rs @@ -423,12 +423,18 @@ fn check_where_clauses<'a, 'gcx, 'fcx, 'tcx>(tcx: TyCtxt<'a, 'gcx, 'gcx>, _ => t.super_visit_with(self) } } + + fn visit_region(&mut self, _: ty::Region<'tcx>) -> bool { + true + } } let mut param_count = CountParams { params: FxHashSet() }; - pred.visit_with(&mut param_count); + let has_region = pred.visit_with(&mut param_count); let substituted_pred = pred.subst(fcx.tcx, substs); - // Don't check non-defaulted params, dependent defaults or preds with multiple params. - if substituted_pred.references_error() || param_count.params.len() > 1 { + // Don't check non-defaulted params, dependent defaults (including lifetimes) + // or preds with multiple params. + if substituted_pred.references_error() || param_count.params.len() > 1 + || has_region { continue; } // Avoid duplication of predicates that contain no parameters, for example. diff --git a/src/test/run-pass/defaults-well-formedness.rs b/src/test/run-pass/defaults-well-formedness.rs index f3594679095..9b06bf837ae 100644 --- a/src/test/run-pass/defaults-well-formedness.rs +++ b/src/test/run-pass/defaults-well-formedness.rs @@ -27,4 +27,8 @@ trait SelfBound {} // Not even for well-formedness. struct WellFormedProjection::Item>(A, T); +// Issue #49344, predicates with lifetimes should not be checked. +trait Scope<'a> {} +struct Request<'a, S: Scope<'a> = i32>(S, &'a ()); + fn main() {}