Skip to content

Commit 86a59cd

Browse files
authored
Mop-up changes per Jakob's PR suggestions (#70180)
1) Rename CORINFO_HELP_STATIC_VIRTUAL_AMBIGUOUS_RESOLUTION to CORINFO_HELP_THROW_AMBIGUOUS_RESOLUTION_EXCEPTION and put it next to the other CORINFO_HELP_THROW methods; 2) Add the new helper to CorInfoHelpFunc.cs; 3) Remove the jitinterface member doesFieldBelongToClass; 4) Update the JIT EE GUID. Thanks Tomas Fixes: #69900
1 parent fd0a8e4 commit 86a59cd

File tree

18 files changed

+39
-172
lines changed

18 files changed

+39
-172
lines changed

src/coreclr/inc/corinfo.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,7 @@ enum CorInfoHelpFunc
625625
CORINFO_HELP_THROW_NOT_IMPLEMENTED, // throw NotImplementedException
626626
CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED, // throw PlatformNotSupportedException
627627
CORINFO_HELP_THROW_TYPE_NOT_SUPPORTED, // throw TypeNotSupportedException
628+
CORINFO_HELP_THROW_AMBIGUOUS_RESOLUTION_EXCEPTION, // throw AmbiguousResolutionException for failed static virtual method resolution
628629

629630
CORINFO_HELP_JIT_PINVOKE_BEGIN, // Transition to preemptive mode before a P/Invoke, frame is the first argument
630631
CORINFO_HELP_JIT_PINVOKE_END, // Transition to cooperative mode after a P/Invoke, frame is the first argument
@@ -646,8 +647,6 @@ enum CorInfoHelpFunc
646647
CORINFO_HELP_VALIDATE_INDIRECT_CALL, // CFG: Validate function pointer
647648
CORINFO_HELP_DISPATCH_INDIRECT_CALL, // CFG: Validate and dispatch to pointer
648649

649-
CORINFO_HELP_STATIC_VIRTUAL_AMBIGUOUS_RESOLUTION, // Throw AmbiguousResolutionException for failed static virtual method resolution
650-
651650
CORINFO_HELP_COUNT,
652651
};
653652

src/coreclr/inc/corjit.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -495,12 +495,6 @@ class ICorJitInfo : public ICorDynamicInfo
495495
uint32_t sizeInBytes /* IN: The size of the buffer. Note that this is effectively a
496496
version number for the CORJIT_FLAGS value. */
497497
) = 0;
498-
499-
// Checks if a field belongs to a given class.
500-
virtual bool doesFieldBelongToClass(
501-
CORINFO_FIELD_HANDLE fldHnd, /* IN: the field that we are checking */
502-
CORINFO_CLASS_HANDLE cls /* IN: the class that we are checking */
503-
) = 0;
504498
};
505499

506500
/**********************************************************************************/

src/coreclr/inc/icorjitinfoimpl_generated.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -710,10 +710,6 @@ uint32_t getJitFlags(
710710
CORJIT_FLAGS* flags,
711711
uint32_t sizeInBytes) override;
712712

713-
bool doesFieldBelongToClass(
714-
CORINFO_FIELD_HANDLE fldHnd,
715-
CORINFO_CLASS_HANDLE cls) override;
716-
717713
/**********************************************************************************/
718714
// clang-format on
719715
/**********************************************************************************/

src/coreclr/inc/jiteeversionguid.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ typedef const GUID *LPCGUID;
4343
#define GUID_DEFINED
4444
#endif // !GUID_DEFINED
4545

46-
constexpr GUID JITEEVersionIdentifier = { /* f2a217c4-2a69-4308-99ce-8292c6763776 */
47-
0xf2a217c4,
48-
0x2a69,
49-
0x4308,
50-
{0x99, 0xce, 0x82, 0x92, 0xc6, 0x76, 0x37, 0x76}
46+
constexpr GUID JITEEVersionIdentifier = { /* 5868685e-b877-4ef5-83f0-73d601e50013 */
47+
0x5868685e,
48+
0xb877,
49+
0x4ef5,
50+
{0x83, 0xf0, 0x73, 0xd6, 0x01, 0xe5, 0x00, 0x13}
5151
};
5252

5353
//////////////////////////////////////////////////////////////////////////////////////////////////////////

src/coreclr/inc/jithelpers.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@
309309
JITHELPER(CORINFO_HELP_THROW_NOT_IMPLEMENTED, JIT_ThrowNotImplementedException, CORINFO_HELP_SIG_REG_ONLY)
310310
JITHELPER(CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED, JIT_ThrowPlatformNotSupportedException, CORINFO_HELP_SIG_REG_ONLY)
311311
JITHELPER(CORINFO_HELP_THROW_TYPE_NOT_SUPPORTED, JIT_ThrowTypeNotSupportedException, CORINFO_HELP_SIG_REG_ONLY)
312+
JITHELPER(CORINFO_HELP_THROW_AMBIGUOUS_RESOLUTION_EXCEPTION, JIT_ThrowAmbiguousResolutionException, CORINFO_HELP_SIG_REG_ONLY)
312313

313314
JITHELPER(CORINFO_HELP_JIT_PINVOKE_BEGIN, JIT_PInvokeBegin, CORINFO_HELP_SIG_REG_ONLY)
314315
JITHELPER(CORINFO_HELP_JIT_PINVOKE_END, JIT_PInvokeEnd, CORINFO_HELP_SIG_REG_ONLY)
@@ -343,8 +344,6 @@
343344
JITHELPER(CORINFO_HELP_DISPATCH_INDIRECT_CALL, NULL, CORINFO_HELP_SIG_REG_ONLY)
344345
#endif
345346

346-
JITHELPER(CORINFO_HELP_STATIC_VIRTUAL_AMBIGUOUS_RESOLUTION, JIT_StaticVirtualAmbiguousResolution, CORINFO_HELP_SIG_REG_ONLY)
347-
348347
#undef JITHELPER
349348
#undef DYNAMICJITHELPER
350349
#undef JITHELPER

src/coreclr/jit/ICorJitInfo_API_names.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,5 @@ DEF_CLR_API(recordRelocation)
176176
DEF_CLR_API(getRelocTypeHint)
177177
DEF_CLR_API(getExpectedTargetArchitecture)
178178
DEF_CLR_API(getJitFlags)
179-
DEF_CLR_API(doesFieldBelongToClass)
180179

181180
#undef DEF_CLR_API

src/coreclr/jit/ICorJitInfo_API_wrapper.hpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,16 +1690,6 @@ uint32_t WrapICorJitInfo::getJitFlags(
16901690
return temp;
16911691
}
16921692

1693-
bool WrapICorJitInfo::doesFieldBelongToClass(
1694-
CORINFO_FIELD_HANDLE fldHnd,
1695-
CORINFO_CLASS_HANDLE cls)
1696-
{
1697-
API_ENTER(doesFieldBelongToClass);
1698-
bool temp = wrapHnd->doesFieldBelongToClass(fldHnd, cls);
1699-
API_LEAVE(doesFieldBelongToClass);
1700-
return temp;
1701-
}
1702-
17031693
/**********************************************************************************/
17041694
// clang-format on
17051695
/**********************************************************************************/

src/coreclr/tools/Common/JitInterface/CorInfoBase.cs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2549,25 +2549,10 @@ static uint _getJitFlags(IntPtr thisHandle, IntPtr* ppException, CORJIT_FLAGS* f
25492549
}
25502550
}
25512551

2552-
[UnmanagedCallersOnly]
2553-
static byte _doesFieldBelongToClass(IntPtr thisHandle, IntPtr* ppException, CORINFO_FIELD_STRUCT_* fldHnd, CORINFO_CLASS_STRUCT_* cls)
2554-
{
2555-
var _this = GetThis(thisHandle);
2556-
try
2557-
{
2558-
return _this.doesFieldBelongToClass(fldHnd, cls) ? (byte)1 : (byte)0;
2559-
}
2560-
catch (Exception ex)
2561-
{
2562-
*ppException = _this.AllocException(ex);
2563-
return default;
2564-
}
2565-
}
2566-
25672552

25682553
static IntPtr GetUnmanagedCallbacks()
25692554
{
2570-
void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 173);
2555+
void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 172);
25712556

25722557
callbacks[0] = (delegate* unmanaged<IntPtr, IntPtr*, CORINFO_METHOD_STRUCT_*, byte>)&_isIntrinsic;
25732558
callbacks[1] = (delegate* unmanaged<IntPtr, IntPtr*, CORINFO_METHOD_STRUCT_*, uint>)&_getMethodAttribs;
@@ -2741,7 +2726,6 @@ static IntPtr GetUnmanagedCallbacks()
27412726
callbacks[169] = (delegate* unmanaged<IntPtr, IntPtr*, void*, ushort>)&_getRelocTypeHint;
27422727
callbacks[170] = (delegate* unmanaged<IntPtr, IntPtr*, uint>)&_getExpectedTargetArchitecture;
27432728
callbacks[171] = (delegate* unmanaged<IntPtr, IntPtr*, CORJIT_FLAGS*, uint, uint>)&_getJitFlags;
2744-
callbacks[172] = (delegate* unmanaged<IntPtr, IntPtr*, CORINFO_FIELD_STRUCT_*, CORINFO_CLASS_STRUCT_*, byte>)&_doesFieldBelongToClass;
27452729

27462730
return (IntPtr)callbacks;
27472731
}

src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ which is the right helper to use to allocate an object of a given type. */
271271
CORINFO_HELP_THROW_NOT_IMPLEMENTED, // throw NotImplementedException
272272
CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED, // throw PlatformNotSupportedException
273273
CORINFO_HELP_THROW_TYPE_NOT_SUPPORTED, // throw TypeNotSupportedException
274+
CORINFO_HELP_THROW_AMBIGUOUS_RESOLUTION_EXCEPTION, // throw AmbiguousResolutionException for failed static virtual method resolution
274275

275276
CORINFO_HELP_JIT_PINVOKE_BEGIN, // Transition to preemptive mode before a P/Invoke, frame is the first argument
276277
CORINFO_HELP_JIT_PINVOKE_END, // Transition to cooperative mode after a P/Invoke, frame is the first argument

src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,4 +325,3 @@ FUNCTIONS
325325
uint16_t getRelocTypeHint(void* target)
326326
uint32_t getExpectedTargetArchitecture()
327327
uint32_t getJitFlags(CORJIT_FLAGS* flags, uint32_t sizeInBytes)
328-
bool doesFieldBelongToClass(CORINFO_FIELD_HANDLE fldHnd, CORINFO_CLASS_HANDLE cls)

src/coreclr/tools/aot/jitinterface/jitinterface.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ struct JitInterfaceCallbacks
183183
uint16_t (* getRelocTypeHint)(void * thisHandle, CorInfoExceptionClass** ppException, void* target);
184184
uint32_t (* getExpectedTargetArchitecture)(void * thisHandle, CorInfoExceptionClass** ppException);
185185
uint32_t (* getJitFlags)(void * thisHandle, CorInfoExceptionClass** ppException, CORJIT_FLAGS* flags, uint32_t sizeInBytes);
186-
bool (* doesFieldBelongToClass)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_FIELD_HANDLE fldHnd, CORINFO_CLASS_HANDLE cls);
187186

188187
};
189188

@@ -1858,14 +1857,4 @@ class JitInterfaceWrapper : public ICorJitInfo
18581857
if (pException != nullptr) throw pException;
18591858
return temp;
18601859
}
1861-
1862-
virtual bool doesFieldBelongToClass(
1863-
CORINFO_FIELD_HANDLE fldHnd,
1864-
CORINFO_CLASS_HANDLE cls)
1865-
{
1866-
CorInfoExceptionClass* pException = nullptr;
1867-
bool temp = _callbacks->doesFieldBelongToClass(_thisHandle, &pException, fldHnd, cls);
1868-
if (pException != nullptr) throw pException;
1869-
return temp;
1870-
}
18711860
};

src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2034,13 +2034,3 @@ bool interceptor_ICJI::notifyInstructionSetUsage(CORINFO_InstructionSet instruct
20342034
{
20352035
return original_ICorJitInfo->notifyInstructionSetUsage(instructionSet, supported);
20362036
}
2037-
2038-
bool interceptor_ICJI::doesFieldBelongToClass(
2039-
CORINFO_FIELD_HANDLE fldHnd,
2040-
CORINFO_CLASS_HANDLE cls)
2041-
{
2042-
mc->cr->AddCall("doesFieldBelongToClass");
2043-
bool result = original_ICorJitInfo->doesFieldBelongToClass(fldHnd, cls);
2044-
mc->recDoesFieldBelongToClass(fldHnd, cls, result);
2045-
return result;
2046-
}

src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,11 +1389,3 @@ uint32_t interceptor_ICJI::getJitFlags(
13891389
return original_ICorJitInfo->getJitFlags(flags, sizeInBytes);
13901390
}
13911391

1392-
bool interceptor_ICJI::doesFieldBelongToClass(
1393-
CORINFO_FIELD_HANDLE fldHnd,
1394-
CORINFO_CLASS_HANDLE cls)
1395-
{
1396-
mcs->AddCall("doesFieldBelongToClass");
1397-
return original_ICorJitInfo->doesFieldBelongToClass(fldHnd, cls);
1398-
}
1399-

src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,10 +1217,3 @@ uint32_t interceptor_ICJI::getJitFlags(
12171217
return original_ICorJitInfo->getJitFlags(flags, sizeInBytes);
12181218
}
12191219

1220-
bool interceptor_ICJI::doesFieldBelongToClass(
1221-
CORINFO_FIELD_HANDLE fldHnd,
1222-
CORINFO_CLASS_HANDLE cls)
1223-
{
1224-
return original_ICorJitInfo->doesFieldBelongToClass(fldHnd, cls);
1225-
}
1226-

src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,13 +1576,6 @@ uint32_t MyICJI::getJitFlags(CORJIT_FLAGS* jitFlags, uint32_t sizeInBytes)
15761576
return ret;
15771577
}
15781578

1579-
bool MyICJI::doesFieldBelongToClass(CORINFO_FIELD_HANDLE fldHnd, CORINFO_CLASS_HANDLE cls)
1580-
{
1581-
jitInstance->mc->cr->AddCall("doesFieldBelongToClass");
1582-
bool result = jitInstance->mc->repDoesFieldBelongToClass(fldHnd, cls);
1583-
return result;
1584-
}
1585-
15861579
// Runs the given function with the given parameter under an error trap
15871580
// and returns true if the function completes successfully. We fake this
15881581
// up a bit for SuperPMI and simply catch all exceptions.

src/coreclr/vm/jithelpers.cpp

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3375,34 +3375,6 @@ NOINLINE HCIMPL3(CORINFO_MethodPtr, JIT_VirtualFunctionPointer_Framed, Object *
33753375
}
33763376
HCIMPLEND
33773377

3378-
HCIMPL3(void, JIT_StaticVirtualAmbiguousResolution,
3379-
MethodDesc *method,
3380-
MethodTable *interfaceType,
3381-
MethodTable *targetType)
3382-
{
3383-
FCALL_CONTRACT;
3384-
3385-
SString strMethodName;
3386-
SString strInterfaceName;
3387-
SString strTargetClassName;
3388-
3389-
HELPER_METHOD_FRAME_BEGIN_0(); // Set up a frame
3390-
3391-
TypeString::AppendMethod(strMethodName, method, method->GetMethodInstantiation());
3392-
TypeString::AppendType(strInterfaceName, TypeHandle(interfaceType));
3393-
TypeString::AppendType(strTargetClassName, targetType);
3394-
3395-
HELPER_METHOD_FRAME_END(); // Set up a frame
3396-
3397-
FCThrowExVoid(
3398-
kAmbiguousImplementationException,
3399-
IDS_CLASSLOAD_AMBIGUOUS_OVERRIDE,
3400-
strMethodName,
3401-
strInterfaceName,
3402-
strTargetClassName);
3403-
}
3404-
HCIMPLEND
3405-
34063378
HCIMPL1(Object*, JIT_GetRuntimeFieldStub, CORINFO_FIELD_HANDLE field)
34073379
{
34083380
FCALL_CONTRACT;
@@ -4181,6 +4153,35 @@ HCIMPL0(void, JIT_ThrowTypeNotSupportedException)
41814153
}
41824154
HCIMPLEND
41834155

4156+
/*********************************************************************/
4157+
HCIMPL3(void, JIT_ThrowAmbiguousResolutionException,
4158+
MethodDesc *method,
4159+
MethodTable *interfaceType,
4160+
MethodTable *targetType)
4161+
{
4162+
FCALL_CONTRACT;
4163+
4164+
SString strMethodName;
4165+
SString strInterfaceName;
4166+
SString strTargetClassName;
4167+
4168+
HELPER_METHOD_FRAME_BEGIN_0(); // Set up a frame
4169+
4170+
TypeString::AppendMethod(strMethodName, method, method->GetMethodInstantiation());
4171+
TypeString::AppendType(strInterfaceName, TypeHandle(interfaceType));
4172+
TypeString::AppendType(strTargetClassName, targetType);
4173+
4174+
HELPER_METHOD_FRAME_END(); // Set up a frame
4175+
4176+
FCThrowExVoid(
4177+
kAmbiguousImplementationException,
4178+
IDS_CLASSLOAD_AMBIGUOUS_OVERRIDE,
4179+
strMethodName,
4180+
strInterfaceName,
4181+
strTargetClassName);
4182+
}
4183+
HCIMPLEND
4184+
41844185
/*********************************************************************/
41854186
HCIMPL0(void, JIT_Overflow)
41864187
{

src/coreclr/vm/jitinterface.cpp

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5433,7 +5433,7 @@ void CEEInfo::getCallInfo(
54335433
// shared generics is covered by the ConstrainedMethodEntrySlot dictionary entry.
54345434
pResult->kind = CORINFO_CALL;
54355435
pResult->accessAllowed = CORINFO_ACCESS_ILLEGAL;
5436-
pResult->callsiteCalloutHelper.helperNum = CORINFO_HELP_STATIC_VIRTUAL_AMBIGUOUS_RESOLUTION;
5436+
pResult->callsiteCalloutHelper.helperNum = CORINFO_HELP_THROW_AMBIGUOUS_RESOLUTION_EXCEPTION;
54375437
pResult->callsiteCalloutHelper.numArgs = 3;
54385438
pResult->callsiteCalloutHelper.args[0].methodHandle = (CORINFO_METHOD_HANDLE)pMD;
54395439
pResult->callsiteCalloutHelper.args[0].argType = CORINFO_HELPER_ARG_TYPE_Method;
@@ -11617,50 +11617,6 @@ uint32_t CEEJitInfo::getExpectedTargetArchitecture()
1161711617
return IMAGE_FILE_MACHINE_NATIVE;
1161811618
}
1161911619

11620-
bool CEEJitInfo::doesFieldBelongToClass(CORINFO_FIELD_HANDLE fldHnd, CORINFO_CLASS_HANDLE cls)
11621-
{
11622-
CONTRACTL {
11623-
THROWS;
11624-
GC_TRIGGERS;
11625-
MODE_PREEMPTIVE;
11626-
} CONTRACTL_END;
11627-
11628-
bool result = false;
11629-
11630-
JIT_TO_EE_TRANSITION();
11631-
11632-
FieldDesc* field = (FieldDesc*) fldHnd;
11633-
TypeHandle th(cls);
11634-
11635-
_ASSERTE(!field->IsStatic());
11636-
11637-
// doesFieldBelongToClass implements the predicate of...
11638-
// if field is not associated with the class in any way, return false.
11639-
// if field is the only FieldDesc that the JIT might see for a given class handle
11640-
// and logical field pair then return true. This is needed as the field handle here
11641-
// is used as a key into a hashtable mapping writes to fields to value numbers.
11642-
//
11643-
// In the CoreCLR VM implementation, verifying that the canonical MethodTable of
11644-
// the field matches the type found via GetExactDeclaringType, as all instance fields
11645-
// are only held on the canonical MethodTable.
11646-
// This yields a truth table such as
11647-
11648-
// BaseType._field, BaseType -> true
11649-
// BaseType._field, DerivedType -> true
11650-
// BaseType<__Canon>._field, BaseType<__Canon> -> true
11651-
// BaseType<__Canon>._field, BaseType<string> -> true
11652-
// BaseType<__Canon>._field, BaseType<object> -> true
11653-
// BaseType<sbyte>._field, BaseType<sbyte> -> true
11654-
// BaseType<sbyte>._field, BaseType<byte> -> false
11655-
11656-
MethodTable* pMT = field->GetExactDeclaringType(th.GetMethodTable());
11657-
result = (pMT != nullptr) && (pMT->GetCanonicalMethodTable() == field->GetApproxEnclosingMethodTable()->GetCanonicalMethodTable());
11658-
11659-
EE_TO_JIT_TRANSITION();
11660-
11661-
return result;
11662-
}
11663-
1166411620
void CEEInfo::JitProcessShutdownWork()
1166511621
{
1166611622
LIMITED_METHOD_CONTRACT;
@@ -14283,12 +14239,6 @@ uint32_t CEEInfo::getExpectedTargetArchitecture()
1428314239
return IMAGE_FILE_MACHINE_NATIVE;
1428414240
}
1428514241

14286-
bool CEEInfo::doesFieldBelongToClass(CORINFO_FIELD_HANDLE fld, CORINFO_CLASS_HANDLE cls)
14287-
{
14288-
LIMITED_METHOD_CONTRACT;
14289-
UNREACHABLE_RET(); // only called on derived class.
14290-
}
14291-
1429214242
void CEEInfo::setBoundaries(CORINFO_METHOD_HANDLE ftn, ULONG32 cMap,
1429314243
ICorDebugInfo::OffsetMapping *pMap)
1429414244
{

src/coreclr/vm/jitinterface.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -670,8 +670,6 @@ class CEEJitInfo : public CEEInfo
670670

671671
uint32_t getExpectedTargetArchitecture() override final;
672672

673-
bool doesFieldBelongToClass(CORINFO_FIELD_HANDLE fld, CORINFO_CLASS_HANDLE cls) override final;
674-
675673
void ResetForJitRetry()
676674
{
677675
CONTRACTL {

0 commit comments

Comments
 (0)