diff --git a/src/codegen.cpp b/src/codegen.cpp index fafb2c821e9ba..9a0919c9343d0 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5950,10 +5950,13 @@ static std::unique_ptr emit_function( vi.value = theArg; if (specsig && theArg.V && ctx.debug_enabled && vi.dinfo) { SmallVector addr; - if ((Metadata*)vi.dinfo->getType() != jl_pvalue_dillvmt && theArg.ispointer()) - addr.push_back(llvm::dwarf::DW_OP_deref); - AllocaInst *parg = dyn_cast(theArg.V); - if (!parg) { + Value *parg; + if (theArg.ispointer()) { + parg = theArg.V; + if ((Metadata*)vi.dinfo->getType() != jl_pvalue_dillvmt) + addr.push_back(llvm::dwarf::DW_OP_deref); + } + else { parg = ctx.builder.CreateAlloca(theArg.V->getType(), NULL, jl_symbol_name(s)); ctx.builder.CreateStore(theArg.V, parg); } diff --git a/src/llvm-gc-invariant-verifier.cpp b/src/llvm-gc-invariant-verifier.cpp index 05fcfad5d935a..cd10881863c98 100644 --- a/src/llvm-gc-invariant-verifier.cpp +++ b/src/llvm-gc-invariant-verifier.cpp @@ -85,12 +85,10 @@ void GCInvariantVerifier::visitStoreInst(StoreInst &SI) { if (VTy->isPointerTy()) { /* We currently don't obey this for arguments. That's ok - they're externally rooted. */ - if (!isa(SI.getValueOperand())) { - unsigned AS = cast(VTy)->getAddressSpace(); - Check(AS != AddressSpace::CalleeRooted && - AS != AddressSpace::Derived, - "Illegal store of decayed value", &SI); - } + unsigned AS = cast(VTy)->getAddressSpace(); + Check(AS != AddressSpace::CalleeRooted && + AS != AddressSpace::Derived, + "Illegal store of decayed value", &SI); } VTy = SI.getPointerOperand()->getType(); if (VTy->isPointerTy()) {