1
Fork 0

Review comments

This commit is contained in:
Esteban Kuber 2021-11-16 22:23:41 +00:00
parent 83ce1aad42
commit 9cc7bd7692
2 changed files with 12 additions and 10 deletions

View file

@ -151,9 +151,8 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
if mention_capture { if mention_capture {
spans.push(sup_origin.span()); spans.push(sup_origin.span());
} }
// We sort the spans *ignoring* expansion context. Below, the closure logic is repeated // We dedup the spans *ignoring* expansion context.
// because one method expects a closure taking `&Span` and the other `&mut Span`. spans.sort();
spans.sort_by_key(|span| (span.lo(), span.hi()));
spans.dedup_by_key(|span| (span.lo(), span.hi())); spans.dedup_by_key(|span| (span.lo(), span.hi()));
// We try to make the output have fewer overlapping spans if possible. // We try to make the output have fewer overlapping spans if possible.
@ -183,7 +182,9 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
err.span_note(*bound, "`'static` lifetime requirement introduced by this bound"); err.span_note(*bound, "`'static` lifetime requirement introduced by this bound");
} }
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = sub_origin { if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = sub_origin {
if let ObligationCauseCode::BlockTailExpression(hir_id) = &cause.code { if let ObligationCauseCode::ReturnValue(hir_id)
| ObligationCauseCode::BlockTailExpression(hir_id) = &cause.code
{
let parent_id = tcx.hir().get_parent_item(*hir_id); let parent_id = tcx.hir().get_parent_item(*hir_id);
if let Some(fn_decl) = tcx.hir().fn_decl_by_hir_id(parent_id) { if let Some(fn_decl) = tcx.hir().fn_decl_by_hir_id(parent_id) {
let mut span: MultiSpan = fn_decl.output.span().into(); let mut span: MultiSpan = fn_decl.output.span().into();

View file

@ -97,7 +97,7 @@ pub enum RegionResolutionError<'tcx> {
Region<'tcx>, Region<'tcx>,
SubregionOrigin<'tcx>, SubregionOrigin<'tcx>,
Region<'tcx>, Region<'tcx>,
Vec<Span>, Vec<Span>, // All the influences on a given value that didn't meet its constraints.
), ),
/// Indicates a `'b: 'a` constraint where `'a` is in a universe that /// Indicates a `'b: 'a` constraint where `'a` is in a universe that
@ -570,9 +570,10 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
// have to revisit this portion of the code and // have to revisit this portion of the code and
// think hard about it. =) -- nikomatsakis // think hard about it. =) -- nikomatsakis
// Obtain the spans for all the capture points for // Obtain the spans for all the places that can
// influence the constraints on this value for
// richer diagnostics in `static_impl_trait`. // richer diagnostics in `static_impl_trait`.
let captures: Vec<Span> = self let influences: Vec<Span> = self
.data .data
.constraints .constraints
.iter() .iter()
@ -590,7 +591,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
&mut dup_vec, &mut dup_vec,
node_vid, node_vid,
errors, errors,
captures, influences,
); );
} }
} }
@ -645,7 +646,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
dup_vec: &mut IndexVec<RegionVid, Option<RegionVid>>, dup_vec: &mut IndexVec<RegionVid, Option<RegionVid>>,
node_idx: RegionVid, node_idx: RegionVid,
errors: &mut Vec<RegionResolutionError<'tcx>>, errors: &mut Vec<RegionResolutionError<'tcx>>,
captures: Vec<Span>, influences: Vec<Span>,
) { ) {
// Errors in expanding nodes result from a lower-bound that is // Errors in expanding nodes result from a lower-bound that is
// not contained by an upper-bound. // not contained by an upper-bound.
@ -700,7 +701,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
lower_bound.region, lower_bound.region,
upper_bound.origin.clone(), upper_bound.origin.clone(),
upper_bound.region, upper_bound.region,
captures, influences,
)); ));
return; return;
} }