diff --git a/src/coreclr/jit/indirectcalltransformer.cpp b/src/coreclr/jit/indirectcalltransformer.cpp index 9fbac3b55a46ee..f2149f62546b87 100644 --- a/src/coreclr/jit/indirectcalltransformer.cpp +++ b/src/coreclr/jit/indirectcalltransformer.cpp @@ -754,8 +754,21 @@ class IndirectCallTransformer // void SpillArgToTempBeforeGuard(CallArg* arg) { - unsigned tmpNum = compiler->lvaGrabTemp(true DEBUGARG("guarded devirt arg temp")); - GenTree* store = compiler->gtNewTempStore(tmpNum, arg->GetNode()); + unsigned tmpNum = compiler->lvaGrabTemp(true DEBUGARG("guarded devirt arg temp")); + GenTree* const argNode = arg->GetNode(); + GenTree* store = compiler->gtNewTempStore(tmpNum, argNode); + + if (argNode->TypeIs(TYP_REF)) + { + bool isExact = false; + bool isNonNull = false; + CORINFO_CLASS_HANDLE cls = compiler->gtGetClassHandle(argNode, &isExact, &isNonNull); + if (cls != NO_CLASS_HANDLE) + { + compiler->lvaSetClass(tmpNum, cls, isExact); + } + } + Statement* storeStmt = compiler->fgNewStmtFromTree(store, stmt->GetDebugInfo()); compiler->fgInsertStmtAtEnd(checkBlock, storeStmt);