From f019a92b7770236928a64a4c21a22c46e55adddb Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Wed, 3 Aug 2016 13:10:39 +0800 Subject: [PATCH] Correctly handle AdjustNeverToAny in try_find_coercion_lub --- src/librustc_typeck/check/coercion.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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)