trans: don't create allocas anywhere other than the entry block.

This commit is contained in:
Eduard Burtescu 2016-06-07 10:04:31 +03:00
parent 11e31091a9
commit 02cbc0ef8c

View File

@ -894,8 +894,11 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
// bitcasting to the struct type yields invalid cast errors.
// We instead thus allocate some scratch space...
let llscratch = bcx.alloca(llcast_ty, "fn_ret_cast");
bcx.with_block(|bcx| base::call_lifetime_start(bcx, llscratch));
let llscratch = bcx.with_block(|bcx| {
let alloca = base::alloca(bcx, llcast_ty, "fn_ret_cast");
base::call_lifetime_start(bcx, alloca);
alloca
});
// ...where we first store the value...
bcx.store(op.immediate(), llscratch);