diff --git a/src/test/compile-fail/bad-bang-ann-2.rs b/src/test/compile-fail/bad-bang-ann-2.rs new file mode 100644 index 000000000000..c2b156bd8c9c --- /dev/null +++ b/src/test/compile-fail/bad-bang-ann-2.rs @@ -0,0 +1,12 @@ +// -*- rust -*- +// xfail-stage0 +// Tests that a function with a ! annotation always actually fails +// error-pattern: some control paths may return + +fn bad_bang(uint i) -> ! { + log 3; +} + +fn main() { + bad_bang(5u); +} \ No newline at end of file diff --git a/src/test/compile-fail/bad-bang-ann-3.rs b/src/test/compile-fail/bad-bang-ann-3.rs new file mode 100644 index 000000000000..7538fffa569e --- /dev/null +++ b/src/test/compile-fail/bad-bang-ann-3.rs @@ -0,0 +1,12 @@ +// -*- rust -*- +// xfail-stage0 +// Tests that a function with a ! annotation always actually fails +// error-pattern: some control paths may return + +fn bad_bang(uint i) -> ! { + ret 7u; +} + +fn main() { + bad_bang(5u); +} \ No newline at end of file diff --git a/src/test/compile-fail/bad-bang-ann.rs b/src/test/compile-fail/bad-bang-ann.rs new file mode 100644 index 000000000000..0b9c3a19cd2f --- /dev/null +++ b/src/test/compile-fail/bad-bang-ann.rs @@ -0,0 +1,16 @@ +// -*- rust -*- +// xfail-stage0 +// Tests that a function with a ! annotation always actually fails +// error-pattern: may return to the caller + +fn bad_bang(uint i) -> ! { + if (i < 0u) { + } + else { + fail; + } +} + +fn main() { + bad_bang(5u); +} \ No newline at end of file diff --git a/src/test/run-pass/ret-bang.rs b/src/test/run-pass/ret-bang.rs new file mode 100644 index 000000000000..ce80d8551db7 --- /dev/null +++ b/src/test/run-pass/ret-bang.rs @@ -0,0 +1,18 @@ +// -*- rust -*- +fn my_err(str s) -> ! { + log_err s; + fail; +} + +fn okay(uint i) -> int { + if (i == 3u) { + my_err("I don't like three"); + } + else { + ret 42; + } +} + +fn main() { + okay(4u); +} \ No newline at end of file