diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index c6e256ac03f4..fe5725fdb6b7 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -891,6 +891,8 @@ fn parse_bottom_expr(&parser p) -> @ast::expr { } else if (eat_word(p, "ret")) { alt (p.peek()) { case (token::SEMI) { ex = ast::expr_ret(none); } + // Handle ret as the block result expression + case (token::RBRACE) { ex = ast::expr_ret(none); } case (_) { auto e = parse_expr(p); hi = e.span.hi; diff --git a/src/test/run-pass/expr-empty-ret.rs b/src/test/run-pass/expr-empty-ret.rs new file mode 100644 index 000000000000..86d2efdda13c --- /dev/null +++ b/src/test/run-pass/expr-empty-ret.rs @@ -0,0 +1,11 @@ +// xfail-stage0 +// Issue #521 + +fn f() { + auto x = alt (true) { + case (true) { 10 } + case (false) { ret } + }; +} + +fn main() { }