diff --git a/src/Makefile b/src/Makefile index 9d6eed19b64..de88a9317fd 100644 --- a/src/Makefile +++ b/src/Makefile @@ -370,6 +370,7 @@ TEST_XFAILS_X86 := $(MUT_BOX_XFAILS) \ test/run-pass/fn-lval.rs \ test/run-pass/generic-fn-infer.rs \ test/run-pass/generic-recursive-tag.rs \ + test/run-pass/iter-ret.rs \ test/run-pass/mlist-cycle.rs \ test/run-pass/mutable-vec-drop.rs \ test/run-pass/obj-as.rs \ @@ -430,6 +431,7 @@ TEST_XFAILS_LLVM := $(addprefix test/run-pass/, \ import.rs \ inner-module.rs \ iter-range.rs \ + iter-ret.rs \ large-records.rs \ lazy-and-or.rs \ lazy-init.rs \ diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml index be7adc1a8f5..07b22dca951 100644 --- a/src/boot/me/trans.ml +++ b/src/boot/me/trans.ml @@ -4532,6 +4532,8 @@ let trans_visitor calls | Ast.STMT_ret atom_opt -> + if get_stmt_depth cx stmt.id > 0 + then unimpl (Some stmt.id) "ret within iterator-block"; begin match atom_opt with None -> () diff --git a/src/test/run-pass/iter-ret.rs b/src/test/run-pass/iter-ret.rs new file mode 100644 index 00000000000..12eb9b4e645 --- /dev/null +++ b/src/test/run-pass/iter-ret.rs @@ -0,0 +1,13 @@ +iter x() -> int { +} + +fn f() -> bool { + for each (int i in x()) { + ret true; + } + ret false; +} + +fn main(vec[str] args) -> () { + f(); +}