diff options
| author | Andrew Cann <shum@canndrew.org> | 2016-08-03 13:10:39 +0800 |
|---|---|---|
| committer | Andrew Cann <shum@canndrew.org> | 2016-08-13 21:37:09 +0800 |
| commit | f019a92b7770236928a64a4c21a22c46e55adddb (patch) | |
| tree | 85f5f4d6df68ac06957adbc0aa02be1609568ec0 /src | |
| parent | 69e27614c6b7317dde84eec728b85607b1064f3b (diff) | |
Correctly handle AdjustNeverToAny in try_find_coercion_lub
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/check/coercion.rs | 8 |
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) |
