about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/traits/select.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc/middle/traits/select.rs b/src/librustc/middle/traits/select.rs
index 864d666d24f..6fcf5ef6ad8 100644
--- a/src/librustc/middle/traits/select.rs
+++ b/src/librustc/middle/traits/select.rs
@@ -1143,8 +1143,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
         }
 
         match self_ty.sty {
-            ty::ty_infer(ty::TyVar(_)) |
             ty::ty_trait(..) => {},
+            ty::ty_infer(ty::TyVar(_)) => {
+                // the defaulted impl might apply, we don't know
+                if ty::trait_has_default_impl(self.tcx(), def_id) {
+                    candidates.ambiguous = true;
+                }
+            }
             _ => {
                 if ty::trait_has_default_impl(self.tcx(), def_id) {
                     candidates.vec.push(DefaultImplCandidate(def_id.clone()))