From d267e7486e7158f8633424389f789d23149e1064 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 8 Sep 2011 13:45:12 -0700 Subject: [PATCH] Zero locals when the initializer might call a function The function might fail, leaving the local uninitialized Issue #236 --- src/comp/middle/trans.rs | 1 + src/test/run-fail/unwind-initializer-indirect.rs | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 src/test/run-fail/unwind-initializer-indirect.rs diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 2c9cbb6d0dc..4f9b554f439 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -4520,6 +4520,7 @@ fn init_local(bcx: @block_ctxt, local: &@ast::local) -> result { ast::expr_ret(_) { true } ast::expr_break. { true } ast::expr_cont. { true } + ast::expr_call(_, _) { true } _ { let ex_ty = ty::expr_ty(e.ccx.tcx, ex); ty::type_is_bot(e.ccx.tcx, ex_ty) diff --git a/src/test/run-fail/unwind-initializer-indirect.rs b/src/test/run-fail/unwind-initializer-indirect.rs new file mode 100644 index 00000000000..726dc3d9040 --- /dev/null +++ b/src/test/run-fail/unwind-initializer-indirect.rs @@ -0,0 +1,7 @@ +// error-pattern:fail + +fn f() -> @int { fail; } + +fn main() { + let a: @int = f(); +} \ No newline at end of file