aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/hir_ty/src/infer/unify.rs3
-rw-r--r--crates/hir_ty/src/tests/regression.rs71
2 files changed, 34 insertions, 40 deletions
diff --git a/crates/hir_ty/src/infer/unify.rs b/crates/hir_ty/src/infer/unify.rs
index 896d084f4..e7718aa22 100644
--- a/crates/hir_ty/src/infer/unify.rs
+++ b/crates/hir_ty/src/infer/unify.rs
@@ -295,7 +295,6 @@ impl<'a> InferenceTable<'a> {
295 |ty, _| match ty.kind(&Interner) { 295 |ty, _| match ty.kind(&Interner) {
296 &TyKind::InferenceVar(tv, kind) => { 296 &TyKind::InferenceVar(tv, kind) => {
297 if tv_stack.contains(&tv) { 297 if tv_stack.contains(&tv) {
298 cov_mark::hit!(type_var_cycles_resolve_as_possible);
299 // recursive type 298 // recursive type
300 return self.type_variable_table.fallback_value(tv, kind); 299 return self.type_variable_table.fallback_value(tv, kind);
301 } 300 }
@@ -366,7 +365,6 @@ mod resolve {
366 ) -> Fallible<Ty> { 365 ) -> Fallible<Ty> {
367 let var = self.var_unification_table.inference_var_root(var); 366 let var = self.var_unification_table.inference_var_root(var);
368 if self.var_stack.contains(&var) { 367 if self.var_stack.contains(&var) {
369 cov_mark::hit!(type_var_cycles_resolve_as_possible);
370 // recursive type 368 // recursive type
371 let default = self.type_variable_table.fallback_value(var, kind).cast(&Interner); 369 let default = self.type_variable_table.fallback_value(var, kind).cast(&Interner);
372 return Ok((self.fallback)(var, VariableKind::Ty(kind), default, outer_binder) 370 return Ok((self.fallback)(var, VariableKind::Ty(kind), default, outer_binder)
@@ -403,7 +401,6 @@ mod resolve {
403 .intern(&Interner) 401 .intern(&Interner)
404 .cast(&Interner); 402 .cast(&Interner);
405 if self.var_stack.contains(&var) { 403 if self.var_stack.contains(&var) {
406 cov_mark::hit!(type_var_cycles_resolve_as_possible);
407 // recursive 404 // recursive
408 return Ok((self.fallback)(var, VariableKind::Const(ty), default, outer_binder) 405 return Ok((self.fallback)(var, VariableKind::Const(ty), default, outer_binder)
409 .assert_const_ref(&Interner) 406 .assert_const_ref(&Interner)
diff --git a/crates/hir_ty/src/tests/regression.rs b/crates/hir_ty/src/tests/regression.rs
index 431861712..59a16f390 100644
--- a/crates/hir_ty/src/tests/regression.rs
+++ b/crates/hir_ty/src/tests/regression.rs
@@ -86,8 +86,6 @@ fn bug_651() {
86 86
87#[test] 87#[test]
88fn recursive_vars() { 88fn recursive_vars() {
89 cov_mark::check!(type_var_cycles_resolve_completely);
90 cov_mark::check!(type_var_cycles_resolve_as_possible);
91 check_infer( 89 check_infer(
92 r#" 90 r#"
93 fn test() { 91 fn test() {
@@ -97,12 +95,12 @@ fn recursive_vars() {
97 "#, 95 "#,
98 expect![[r#" 96 expect![[r#"
99 10..47 '{ ...&y]; }': () 97 10..47 '{ ...&y]; }': ()
100 20..21 'y': &{unknown} 98 20..21 'y': {unknown}
101 24..31 'unknown': &{unknown} 99 24..31 'unknown': {unknown}
102 37..44 '[y, &y]': [&&{unknown}; 2] 100 37..44 '[y, &y]': [{unknown}; 2]
103 38..39 'y': &{unknown} 101 38..39 'y': {unknown}
104 41..43 '&y': &&{unknown} 102 41..43 '&y': &{unknown}
105 42..43 'y': &{unknown} 103 42..43 'y': {unknown}
106 "#]], 104 "#]],
107 ); 105 );
108} 106}
@@ -119,19 +117,19 @@ fn recursive_vars_2() {
119 "#, 117 "#,
120 expect![[r#" 118 expect![[r#"
121 10..79 '{ ...x)]; }': () 119 10..79 '{ ...x)]; }': ()
122 20..21 'x': &&{unknown} 120 20..21 'x': {unknown}
123 24..31 'unknown': &&{unknown} 121 24..31 'unknown': {unknown}
124 41..42 'y': &&{unknown} 122 41..42 'y': {unknown}
125 45..52 'unknown': &&{unknown} 123 45..52 'unknown': {unknown}
126 58..76 '[(x, y..., &x)]': [(&&&{unknown}, &&&{unknown}); 2] 124 58..76 '[(x, y..., &x)]': [({unknown}, {unknown}); 2]
127 59..65 '(x, y)': (&&&{unknown}, &&&{unknown}) 125 59..65 '(x, y)': ({unknown}, {unknown})
128 60..61 'x': &&{unknown} 126 60..61 'x': {unknown}
129 63..64 'y': &&{unknown} 127 63..64 'y': {unknown}
130 67..75 '(&y, &x)': (&&&{unknown}, &&&{unknown}) 128 67..75 '(&y, &x)': (&{unknown}, &{unknown})
131 68..70 '&y': &&&{unknown} 129 68..70 '&y': &{unknown}
132 69..70 'y': &&{unknown} 130 69..70 'y': {unknown}
133 72..74 '&x': &&&{unknown} 131 72..74 '&x': &{unknown}
134 73..74 'x': &&{unknown} 132 73..74 'x': {unknown}
135 "#]], 133 "#]],
136 ); 134 );
137} 135}
@@ -165,7 +163,6 @@ fn infer_std_crash_1() {
165 163
166#[test] 164#[test]
167fn infer_std_crash_2() { 165fn infer_std_crash_2() {
168 cov_mark::check!(type_var_resolves_to_int_var);
169 // caused "equating two type variables, ...", taken from std 166 // caused "equating two type variables, ...", taken from std
170 check_infer( 167 check_infer(
171 r#" 168 r#"
@@ -257,27 +254,27 @@ fn infer_std_crash_5() {
257 expect![[r#" 254 expect![[r#"
258 26..322 '{ ... } }': () 255 26..322 '{ ... } }': ()
259 32..320 'for co... }': () 256 32..320 'for co... }': ()
260 36..43 'content': &{unknown} 257 36..43 'content': {unknown}
261 47..60 'doesnt_matter': {unknown} 258 47..60 'doesnt_matter': {unknown}
262 61..320 '{ ... }': () 259 61..320 '{ ... }': ()
263 75..79 'name': &&{unknown} 260 75..79 'name': &{unknown}
264 82..166 'if doe... }': &&{unknown} 261 82..166 'if doe... }': &{unknown}
265 85..98 'doesnt_matter': bool 262 85..98 'doesnt_matter': bool
266 99..128 '{ ... }': &&{unknown} 263 99..128 '{ ... }': &{unknown}
267 113..118 'first': &&{unknown} 264 113..118 'first': &{unknown}
268 134..166 '{ ... }': &&{unknown} 265 134..166 '{ ... }': &{unknown}
269 148..156 '&content': &&{unknown} 266 148..156 '&content': &{unknown}
270 149..156 'content': &{unknown} 267 149..156 'content': {unknown}
271 181..188 'content': &{unknown} 268 181..188 'content': &{unknown}
272 191..313 'if ICE... }': &{unknown} 269 191..313 'if ICE... }': &{unknown}
273 194..231 'ICE_RE..._VALUE': {unknown} 270 194..231 'ICE_RE..._VALUE': {unknown}
274 194..247 'ICE_RE...&name)': bool 271 194..247 'ICE_RE...&name)': bool
275 241..246 '&name': &&&{unknown} 272 241..246 '&name': &&{unknown}
276 242..246 'name': &&{unknown} 273 242..246 'name': &{unknown}
277 248..276 '{ ... }': &&{unknown} 274 248..276 '{ ... }': &{unknown}
278 262..266 'name': &&{unknown} 275 262..266 'name': &{unknown}
279 282..313 '{ ... }': &{unknown} 276 282..313 '{ ... }': {unknown}
280 296..303 'content': &{unknown} 277 296..303 'content': {unknown}
281 "#]], 278 "#]],
282 ); 279 );
283} 280}
@@ -761,7 +758,7 @@ fn issue_4885() {
761 "#, 758 "#,
762 expect![[r#" 759 expect![[r#"
763 136..139 'key': &K 760 136..139 'key': &K
764 198..214 '{ ...key) }': impl Future<Output = <K as Foo<R>>::Bar> 761 198..214 '{ ...key) }': {unknown}
765 204..207 'bar': fn bar<R, K>(&K) -> impl Future<Output = <K as Foo<R>>::Bar> 762 204..207 'bar': fn bar<R, K>(&K) -> impl Future<Output = <K as Foo<R>>::Bar>
766 204..212 'bar(key)': impl Future<Output = <K as Foo<R>>::Bar> 763 204..212 'bar(key)': impl Future<Output = <K as Foo<R>>::Bar>
767 208..211 'key': &K 764 208..211 'key': &K