diff --git a/src/comp/middle/tstate/ck.rs b/src/comp/middle/tstate/ck.rs index 5f899b81f88..8817a16cdd4 100644 --- a/src/comp/middle/tstate/ck.rs +++ b/src/comp/middle/tstate/ck.rs @@ -145,7 +145,7 @@ fn check_states_against_conditions(fcx: &fn_ctxt, f: &_fn, /* Check that the return value is initialized */ let post = aux::block_poststate(fcx.ccx, f.body); - if f.proto == ast::proto_fn && + if f.proto != ast::proto_iter && !promises(fcx, post, fcx.enclosing.i_return) && !type_is_nil(fcx.ccx.tcx, ret_ty_of_fn(fcx.ccx.tcx, id)) && f.decl.cf == return { diff --git a/src/test/compile-fail/block-require-return.rs b/src/test/compile-fail/block-require-return.rs new file mode 100644 index 00000000000..6a64bd44daa --- /dev/null +++ b/src/test/compile-fail/block-require-return.rs @@ -0,0 +1,5 @@ +// error-pattern: not all control paths return +fn force(f: &block() -> int) -> int { f() } +fn main() { + log_err force({| | }); +}