aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/infer/unify.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2021-05-15 20:30:40 +0100
committerFlorian Diebold <[email protected]>2021-05-21 16:48:34 +0100
commit7c423f5b88f40da4f3682602bf17a9b6848f5411 (patch)
tree423abd599da26c500be29abe18eb9d53eed1e431 /crates/hir_ty/src/infer/unify.rs
parent8397734cfe26793d3e9f9ec5f8392655a4b8e106 (diff)
Fix panic
Diffstat (limited to 'crates/hir_ty/src/infer/unify.rs')
-rw-r--r--crates/hir_ty/src/infer/unify.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/crates/hir_ty/src/infer/unify.rs b/crates/hir_ty/src/infer/unify.rs
index d8edfb4e9..259feecf1 100644
--- a/crates/hir_ty/src/infer/unify.rs
+++ b/crates/hir_ty/src/infer/unify.rs
@@ -149,7 +149,9 @@ impl TypeVariableTable {
149 149
150 fn fallback_value(&self, iv: InferenceVar, kind: TyVariableKind) -> Ty { 150 fn fallback_value(&self, iv: InferenceVar, kind: TyVariableKind) -> Ty {
151 match kind { 151 match kind {
152 _ if self.inner[iv.index() as usize].diverging => TyKind::Never, 152 _ if self.inner.get(iv.index() as usize).map_or(false, |data| data.diverging) => {
153 TyKind::Never
154 }
153 TyVariableKind::General => TyKind::Error, 155 TyVariableKind::General => TyKind::Error,
154 TyVariableKind::Integer => TyKind::Scalar(Scalar::Int(IntTy::I32)), 156 TyVariableKind::Integer => TyKind::Scalar(Scalar::Int(IntTy::I32)),
155 TyVariableKind::Float => TyKind::Scalar(Scalar::Float(FloatTy::F64)), 157 TyVariableKind::Float => TyKind::Scalar(Scalar::Float(FloatTy::F64)),
@@ -205,6 +207,7 @@ impl<'a> InferenceTable<'a> {
205 fn new_var(&mut self, kind: TyVariableKind, diverging: bool) -> Ty { 207 fn new_var(&mut self, kind: TyVariableKind, diverging: bool) -> Ty {
206 let var = self.var_unification_table.new_variable(UniverseIndex::ROOT); 208 let var = self.var_unification_table.new_variable(UniverseIndex::ROOT);
207 // Chalk might have created some type variables for its own purposes that we don't know about... 209 // Chalk might have created some type variables for its own purposes that we don't know about...
210 // TODO refactor this?
208 self.type_variable_table.inner.extend( 211 self.type_variable_table.inner.extend(
209 (0..1 + var.index() as usize - self.type_variable_table.inner.len()) 212 (0..1 + var.index() as usize - self.type_variable_table.inner.len())
210 .map(|_| TypeVariableData { diverging: false }), 213 .map(|_| TypeVariableData { diverging: false }),