From 7364022e7ae4b738fb585dd2262ad67ceebd4266 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Wed, 18 Mar 2015 01:19:53 -0400 Subject: Infer type ! for a loop that can only break out of other loops Closes #23451. Signed-off-by: Anders Kaseorg --- src/test/compile-fail/loop-labeled-break-value.rs | 21 +++++++++++++++++++++ src/test/run-pass/loop-labeled-break-value.rs | 18 ++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/test/compile-fail/loop-labeled-break-value.rs create mode 100644 src/test/run-pass/loop-labeled-break-value.rs (limited to 'src/test') diff --git a/src/test/compile-fail/loop-labeled-break-value.rs b/src/test/compile-fail/loop-labeled-break-value.rs new file mode 100644 index 00000000000..e1ae3ae464f --- /dev/null +++ b/src/test/compile-fail/loop-labeled-break-value.rs @@ -0,0 +1,21 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + loop { + let _: i32 = loop { break }; //~ ERROR mismatched types + } + loop { + let _: i32 = 'inner: loop { break 'inner }; //~ ERROR mismatched types + } + loop { + let _: i32 = 'inner: loop { loop { break 'inner } }; //~ ERROR mismatched types + } +} diff --git a/src/test/run-pass/loop-labeled-break-value.rs b/src/test/run-pass/loop-labeled-break-value.rs new file mode 100644 index 00000000000..f71dc6869be --- /dev/null +++ b/src/test/run-pass/loop-labeled-break-value.rs @@ -0,0 +1,18 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + 'outer: loop { + let _: i32 = loop { break 'outer }; + } + 'outer: loop { + let _: i32 = loop { loop { break 'outer } }; + } +} -- cgit 1.4.1-3-g733a5