about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-10-09 11:42:29 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-10-09 11:42:29 -0700
commitfaf8a2af7aab765c832c9045f08421e42ddb0b35 (patch)
tree1a4da07810081b2ebc3e73bb6732f03e1715d18b /src
parent2c6bcac535942533489bccdd39515babd0ebb15a (diff)
downloadrust-faf8a2af7aab765c832c9045f08421e42ddb0b35.tar.gz
rust-faf8a2af7aab765c832c9045f08421e42ddb0b35.zip
Only suggest change mut if vars are resolved
Diffstat (limited to 'src')
-rw-r--r--src/librustc/traits/error_reporting.rs6
-rw-r--r--src/test/ui/suggestions/suggest-remove-refs-1.stderr1
2 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs
index 1e8f699b520..9eb91569ed5 100644
--- a/src/librustc/traits/error_reporting.rs
+++ b/src/librustc/traits/error_reporting.rs
@@ -1134,6 +1134,12 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
             { // Do not suggest removal of borrow from type arguments.
                 return;
             }
+            let trait_ref = self.resolve_vars_if_possible(trait_ref);
+            if trait_ref.has_infer_types() {
+                // Do not ICE while trying to find if a reborrow would succeed on a trait with
+                // unresolved bindings.
+                return;
+            }
 
             if let ty::Ref(region, t_type, mutability) = trait_ref.skip_binder().self_ty().kind {
                 let trait_type = match mutability {
diff --git a/src/test/ui/suggestions/suggest-remove-refs-1.stderr b/src/test/ui/suggestions/suggest-remove-refs-1.stderr
index 04d17a16cc3..bfc313cabdc 100644
--- a/src/test/ui/suggestions/suggest-remove-refs-1.stderr
+++ b/src/test/ui/suggestions/suggest-remove-refs-1.stderr
@@ -8,7 +8,6 @@ LL |     for (i, n) in &v.iter().enumerate() {
    |                   help: consider removing 1 leading `&`-references
    |
    = help: the trait `std::iter::Iterator` is not implemented for `&std::iter::Enumerate<std::slice::Iter<'_, {integer}>>`
-   = note: `std::iter::Iterator` is implemented for `&mut std::iter::Enumerate<std::slice::Iter<'_, {integer}>>`, but not for `&std::iter::Enumerate<std::slice::Iter<'_, {integer}>>`
    = note: required by `std::iter::IntoIterator::into_iter`
 
 error: aborting due to previous error