about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2018-08-06 23:09:36 +0200
committerDavid Wood <david@davidtw.co>2018-08-09 10:25:26 +0200
commit255ead5faa7d09c3ddd2770077cf1b16014bb4ac (patch)
treef8e71d2e66474bb1b74202b2c2652127130e1519
parent82b48277a2f2c7b52c937fa85bddd90f85fbf3e1 (diff)
downloadrust-255ead5faa7d09c3ddd2770077cf1b16014bb4ac.tar.gz
rust-255ead5faa7d09c3ddd2770077cf1b16014bb4ac.zip
Fallback to 'has type' error messages rather than 'lifetime appears in type'.
-rw-r--r--src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs34
-rw-r--r--src/test/ui/nll/issue-52742.stderr2
2 files changed, 10 insertions, 26 deletions
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
index 90edc7a60bd..6acf3aadf51 100644
--- a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
+++ b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
@@ -242,17 +242,14 @@ impl<'tcx> RegionInferenceContext<'tcx> {
             return Some(region_name);
         }
 
-        let (_argument_name, argument_span) = self.get_argument_name_and_span_for_region(
-            mir, argument_index);
-
-        let region_name = self.synthesize_region_name(counter);
-
-        diag.span_label(
-            argument_span,
-            format!("lifetime `{}` appears in this argument", region_name,),
-        );
-
-        Some(region_name)
+        self.give_name_if_we_cannot_match_hir_ty(
+            infcx,
+            mir,
+            fr,
+            arg_ty,
+            counter,
+            diag,
+        )
     }
 
     fn give_name_if_we_can_match_hir_ty_from_argument(
@@ -370,14 +367,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
 
         search_stack.push((argument_ty, argument_hir_ty));
 
-        let mut closest_match: &hir::Ty = argument_hir_ty;
-
         while let Some((ty, hir_ty)) = search_stack.pop() {
-            // While we search, also track the closet match.
-            if tcx.any_free_region_meets(&ty, |r| r.to_region_vid() == needle_fr) {
-                closest_match = hir_ty;
-            }
-
             match (&ty.sty, &hir_ty.node) {
                 // Check if the `argument_ty` is `&'X ..` where `'X`
                 // is the region we are looking for -- if so, and we have a `&T`
@@ -452,13 +442,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
             }
         }
 
-        let region_name = self.synthesize_region_name(counter);
-        diag.span_label(
-            closest_match.span,
-            format!("lifetime `{}` appears in this type", region_name),
-        );
-
-        return Some(region_name);
+        return None;
     }
 
     /// We've found an enum/struct/union type with the substitutions
diff --git a/src/test/ui/nll/issue-52742.stderr b/src/test/ui/nll/issue-52742.stderr
index 89c235c4e8f..d1b830b9dfc 100644
--- a/src/test/ui/nll/issue-52742.stderr
+++ b/src/test/ui/nll/issue-52742.stderr
@@ -4,7 +4,7 @@ error: unsatisfied lifetime constraints
 LL |     fn take_bar(&mut self, b: Bar<'_>) {
    |                 ---------         -- let's call this `'1`
    |                 |
-   |                 lifetime `'2` appears in this type
+   |                 has type `&mut Foo<'_, '2>`
 LL |         self.y = b.z
    |         ^^^^^^^^^^^^ requires that `'1` must outlive `'2`