lclOffs));
// Access the argument through the local
- GenTreePtr tree = gtNewOperNode(GT_IND, varType, ptrArg);
+ GenTreePtr tree;
+ if (varType == TYP_STRUCT)
+ {
+ tree = gtNewBlockVal(ptrArg, varDsc->lvExactSize);
+ }
+ else
+ {
+ tree = gtNewOperNode(GT_IND, varType, ptrArg);
+ }
tree->gtFlags |= GTF_IND_TGTANYWHERE;
if (varDsc->lvAddrExposed)
if (info.compIsVarArgs)
{
GenTreePtr newTree = fgMorphStackArgForVarArgs(lclNum, varType, 0);
- if (newTree != NULL)
+ if (newTree != nullptr)
+ {
+ if (newTree->OperIsBlk() && ((tree->gtFlags & GTF_VAR_DEF) == 0))
+ {
+ fgMorphBlkToInd(newTree->AsBlk(), newTree->gtType);
+ }
return newTree;
+ }
}
#endif // _TARGET_X86_
{
GenTreePtr newTree =
fgMorphStackArgForVarArgs(tree->gtLclFld.gtLclNum, tree->gtType, tree->gtLclFld.gtLclOffs);
- if (newTree != NULL)
+ if (newTree != nullptr)
+ {
+ if (newTree->OperIsBlk() && ((tree->gtFlags & GTF_VAR_DEF) == 0))
+ {
+ fgMorphBlkToInd(newTree->AsBlk(), newTree->gtType);
+ }
return newTree;
+ }
}
}
#endif // _TARGET_X86_