diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-09-26 03:57:08 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-09-26 03:57:08 +0200 |
| commit | 4c5e42a1396396dcf36f84fda2f08c5f9fa6b6c4 (patch) | |
| tree | 0c65ef95559913d7a8bb157edeaf5f928fffab06 /src | |
| parent | 6164b724029d652e539a76b859c63cd7937157d8 (diff) | |
| download | rust-4c5e42a1396396dcf36f84fda2f08c5f9fa6b6c4.tar.gz rust-4c5e42a1396396dcf36f84fda2f08c5f9fa6b6c4.zip | |
Make 'fail fail;' compile.
Closes #972
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/middle/trans.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 6495ded7d1c..e5190aaa635 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -438,11 +438,13 @@ fn align_of(cx: @block_ctxt, t: ty::t) -> result { } fn alloca(cx: @block_ctxt, t: TypeRef) -> ValueRef { + if cx.unreachable { ret llvm::LLVMGetUndef(t); } ret Alloca(new_raw_block_ctxt(cx.fcx, cx.fcx.llstaticallocas), t); } fn dynastack_alloca(cx: @block_ctxt, t: TypeRef, n: ValueRef, ty: ty::t) -> ValueRef { + if cx.unreachable { ret llvm::LLVMGetUndef(t); } let bcx = cx; let dy_cx = new_raw_block_ctxt(cx.fcx, cx.fcx.lldynamicallocas); let lltaskptr = bcx_fcx(bcx).lltaskptr; @@ -4474,6 +4476,8 @@ fn trans_fail_expr(cx: @block_ctxt, sp_opt: option::t<span>, ty::mk_mach(tcx, ast::ty_u8))); ret trans_fail_value(bcx, sp_opt, data); + } else if bcx.unreachable { + ret rslt(bcx, C_nil()); } else { bcx_ccx(cx).sess.span_bug(expr.span, "fail called with unsupported type " + |
