This repository was archived by the owner on Jan 23, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +4
-2
lines changed Expand file tree Collapse file tree 2 files changed +4
-2
lines changed Original file line number Diff line number Diff line change @@ -5823,7 +5823,7 @@ var_types Compiler::impImportCall (OPCODE opcode,
5823
5823
{
5824
5824
if (opts.IsReadyToRun())
5825
5825
{
5826
- assert (callInfo->kind == CORINFO_CALL);
5826
+ noway_assert (callInfo->kind == CORINFO_CALL);
5827
5827
call->gtIntrinsic.gtEntryPoint = callInfo->codePointerLookup.constLookup;
5828
5828
}
5829
5829
else
Original file line number Diff line number Diff line change @@ -5568,8 +5568,10 @@ void CEEInfo::getCallInfo(
5568
5568
// Note that it is safe to devirtualize in the following cases, since a servicing event cannot later modify it
5569
5569
// 1) Callvirt on a virtual final method of a value type - since value types are sealed types as per ECMA spec
5570
5570
// 2) Delegate.Invoke() - since a Delegate is a sealed class as per ECMA spec
5571
+ // 3) JIT intrinsics - since they have pre-defined behavior
5571
5572
devirt = pTargetMD->GetMethodTable ()->IsValueType () ||
5572
- (pTargetMD->GetMethodTable ()->IsDelegate () && ((DelegateEEClass*)(pTargetMD->GetMethodTable ()->GetClass ()))->m_pInvokeMethod == pMD);
5573
+ (pTargetMD->GetMethodTable ()->IsDelegate () && ((DelegateEEClass*)(pTargetMD->GetMethodTable ()->GetClass ()))->m_pInvokeMethod == pMD) ||
5574
+ (pTargetMD->IsFCall () && ECall::GetIntrinsicID (pTargetMD) != CORINFO_INTRINSIC_Illegal);
5573
5575
5574
5576
callVirtCrossingVersionBubble = true ;
5575
5577
}
You can’t perform that action at this time.
0 commit comments