From fb469c3b31e7da962e91269b53b2f53d672cc4ba Mon Sep 17 00:00:00 2001 From: robojumper Date: Sat, 30 May 2020 02:06:58 +0200 Subject: labelled break test --- crates/ra_hir_ty/src/tests/simple.rs | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'crates/ra_hir_ty/src/tests') diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs index 839491b9e..beceb8634 100644 --- a/crates/ra_hir_ty/src/tests/simple.rs +++ b/crates/ra_hir_ty/src/tests/simple.rs @@ -1943,3 +1943,57 @@ fn test() { "### ); } + +#[test] +fn infer_labelled_break_with_val() { + assert_snapshot!( + infer(r#" +fn foo() { + let _x = || 'outer: loop { + let inner = 'inner: loop { + let i = Default::default(); + if (break 'outer i) { + loop { break 'inner 5i8; }; + } else if true { + break 'inner 6; + } + break 7; + }; + break inner < 8; + }; +} +"#), + @r###" + 10..336 '{ ... }; }': () + 20..22 '_x': || -> bool + 25..333 '|| 'ou... }': || -> bool + 28..333 ''outer... }': bool + 41..333 '{ ... }': () + 55..60 'inner': i32 + 63..301 ''inner... }': i32 + 76..301 '{ ... }': () + 94..95 'i': i32 + 98..114 'Defaul...efault': {unknown} + 98..116 'Defaul...ault()': i32 + 130..270 'if (br... }': () + 134..148 'break 'outer i': ! + 147..148 'i': i32 + 150..209 '{ ... }': () + 168..194 'loop {...5i8; }': i8 + 173..194 '{ brea...5i8; }': () + 175..191 'break ...er 5i8': ! + 188..191 '5i8': i8 + 215..270 'if tru... }': () + 218..222 'true': bool + 223..270 '{ ... }': () + 241..255 'break 'inner 6': ! + 254..255 '6': i32 + 283..290 'break 7': ! + 289..290 '7': i32 + 311..326 'break inner < 8': ! + 317..322 'inner': i32 + 317..326 'inner < 8': bool + 325..326 '8': i32 + "### + ); +} -- cgit v1.2.3 From 1cd78a3355ea70d3070cabb00c80a5d195499752 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 31 May 2020 10:59:40 +0200 Subject: correctly infer labelled breaks --- crates/ra_hir_ty/src/tests/simple.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'crates/ra_hir_ty/src/tests') diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs index beceb8634..88309157b 100644 --- a/crates/ra_hir_ty/src/tests/simple.rs +++ b/crates/ra_hir_ty/src/tests/simple.rs @@ -1969,17 +1969,17 @@ fn foo() { 25..333 '|| 'ou... }': || -> bool 28..333 ''outer... }': bool 41..333 '{ ... }': () - 55..60 'inner': i32 - 63..301 ''inner... }': i32 + 55..60 'inner': i8 + 63..301 ''inner... }': i8 76..301 '{ ... }': () - 94..95 'i': i32 + 94..95 'i': bool 98..114 'Defaul...efault': {unknown} - 98..116 'Defaul...ault()': i32 + 98..116 'Defaul...ault()': bool 130..270 'if (br... }': () 134..148 'break 'outer i': ! - 147..148 'i': i32 + 147..148 'i': bool 150..209 '{ ... }': () - 168..194 'loop {...5i8; }': i8 + 168..194 'loop {...5i8; }': ! 173..194 '{ brea...5i8; }': () 175..191 'break ...er 5i8': ! 188..191 '5i8': i8 @@ -1987,13 +1987,13 @@ fn foo() { 218..222 'true': bool 223..270 '{ ... }': () 241..255 'break 'inner 6': ! - 254..255 '6': i32 + 254..255 '6': i8 283..290 'break 7': ! - 289..290 '7': i32 + 289..290 '7': i8 311..326 'break inner < 8': ! - 317..322 'inner': i32 + 317..322 'inner': i8 317..326 'inner < 8': bool - 325..326 '8': i32 + 325..326 '8': i8 "### ); } -- cgit v1.2.3