diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2020-06-22 16:05:31 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2020-06-22 16:05:31 -0700 |
| commit | 3eb8eb942951d66fe1f0cc1be3a47cd9f147fc3e (patch) | |
| tree | 3e4a90f27e765a509ad2a08928cb04c1e2514e76 /src | |
| parent | 562f4967b4ce7e859b807fc022040bbb22d1f70e (diff) | |
| download | rust-3eb8eb942951d66fe1f0cc1be3a47cd9f147fc3e.tar.gz rust-3eb8eb942951d66fe1f0cc1be3a47cd9f147fc3e.zip | |
review comments
Diffstat (limited to 'src')
3 files changed, 6 insertions, 4 deletions
diff --git a/src/librustc_infer/infer/error_reporting/nice_region_error/named_anon_conflict.rs b/src/librustc_infer/infer/error_reporting/nice_region_error/named_anon_conflict.rs index 7c8ba834dcd..3012928a098 100644 --- a/src/librustc_infer/infer/error_reporting/nice_region_error/named_anon_conflict.rs +++ b/src/librustc_infer/infer/error_reporting/nice_region_error/named_anon_conflict.rs @@ -92,9 +92,10 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> { .next() .is_some() { + // If the failure is due to a `'static` requirement coming from a `dyn` or + // `impl` Trait that *isn't* caused by `async fn` desugaring, handle this case + // better in `static_impl_trait`. debug!("try_report_named_anon_conflict: impl Trait + 'static"); - // This is an `impl Trait` or `dyn Trait` return that evaluates de need of - // `'static`. We handle this case better in `static_impl_trait`. return None; } } diff --git a/src/librustc_infer/infer/error_reporting/nice_region_error/static_impl_trait.rs b/src/librustc_infer/infer/error_reporting/nice_region_error/static_impl_trait.rs index 20b275ea34a..46dad81a099 100644 --- a/src/librustc_infer/infer/error_reporting/nice_region_error/static_impl_trait.rs +++ b/src/librustc_infer/infer/error_reporting/nice_region_error/static_impl_trait.rs @@ -26,7 +26,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> { ); let anon_reg_sup = self.tcx().is_suitable_region(sup_r)?; debug!("try_report_static_impl_trait: anon_reg_sup={:?}", anon_reg_sup); - let fn_returns = self.tcx().return_type_impl_or_dyn_trait(anon_reg_sup.def_id); + let fn_returns = self.tcx().return_type_impl_or_dyn_traits(anon_reg_sup.def_id); if fn_returns.is_empty() { return None; } diff --git a/src/librustc_middle/ty/context.rs b/src/librustc_middle/ty/context.rs index 73374bb1e84..e8ea7dba217 100644 --- a/src/librustc_middle/ty/context.rs +++ b/src/librustc_middle/ty/context.rs @@ -1406,7 +1406,8 @@ impl<'tcx> TyCtxt<'tcx> { }) } - pub fn return_type_impl_or_dyn_trait(&self, scope_def_id: DefId) -> Vec<&'tcx hir::Ty<'tcx>> { + /// Given a `DefId` for an `fn`, return all the `dyn` and `impl` traits in its return type. + pub fn return_type_impl_or_dyn_traits(&self, scope_def_id: DefId) -> Vec<&'tcx hir::Ty<'tcx>> { let hir_id = self.hir().as_local_hir_id(scope_def_id.expect_local()); let hir_output = match self.hir().get(hir_id) { Node::Item(hir::Item { |
