about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAndrew Cann <shum@canndrew.org>2016-08-03 13:10:39 +0800
committerAndrew Cann <shum@canndrew.org>2016-08-13 21:37:09 +0800
commitf019a92b7770236928a64a4c21a22c46e55adddb (patch)
tree85f5f4d6df68ac06957adbc0aa02be1609568ec0 /src
parent69e27614c6b7317dde84eec728b85607b1064f3b (diff)
Correctly handle AdjustNeverToAny in try_find_coercion_lub
Diffstat (limited to 'src')
-rw-r--r--src/librustc_typeck/check/coercion.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/librustc_typeck/check/coercion.rs b/src/librustc_typeck/check/coercion.rs
index f5345bbea2d..b9a7cf76d92 100644
--- a/src/librustc_typeck/check/coercion.rs
+++ b/src/librustc_typeck/check/coercion.rs
@@ -746,6 +746,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
                     }
                     _ => false
                 },
+                Some(&AdjustNeverToAny(_)) => true,
                 Some(_) => false,
                 None => true
             };
@@ -781,7 +782,12 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
             Ok((ty, adjustment)) => {
                 if !adjustment.is_identity() {
                     for expr in exprs() {
-                        self.write_adjustment(expr.id, adjustment);
+                        let previous = self.tables.borrow().adjustments.get(&expr.id).cloned();
+                        if let Some(AdjustNeverToAny(_)) = previous {
+                            self.write_adjustment(expr.id, AdjustNeverToAny(ty));
+                        } else {
+                            self.write_adjustment(expr.id, adjustment);
+                        }
                     }
                 }
                 Ok(ty)