Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit e4d6e78

Browse files
authored
Merge pull request #16108 from briansull/fix-vm-contract
Fix contract violation in new method CEEInfo::getTypeForPrimitiveNumericClass
2 parents a916420 + 6f46020 commit e4d6e78

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

src/vm/jitinterface.cpp

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4429,10 +4429,10 @@ CorInfoType CEEInfo::getTypeForPrimitiveValueClass(
44294429
CorInfoType CEEInfo::getTypeForPrimitiveNumericClass(
44304430
CORINFO_CLASS_HANDLE clsHnd)
44314431
{
4432-
CONTRACTL {
4432+
CONTRACTL{
44334433
SO_TOLERANT;
4434-
THROWS;
4435-
GC_TRIGGERS;
4434+
NOTHROW;
4435+
GC_NOTRIGGER;
44364436
MODE_PREEMPTIVE;
44374437
} CONTRACTL_END;
44384438

@@ -4446,21 +4446,40 @@ CorInfoType CEEInfo::getTypeForPrimitiveNumericClass(
44464446
CorElementType ty = th.GetSignatureCorElementType();
44474447
switch (ty)
44484448
{
4449-
case ELEMENT_TYPE_I1:
4450-
case ELEMENT_TYPE_U1:
4451-
case ELEMENT_TYPE_I2:
4452-
case ELEMENT_TYPE_U2:
4453-
case ELEMENT_TYPE_I4:
4454-
case ELEMENT_TYPE_U4:
4455-
case ELEMENT_TYPE_I8:
4456-
case ELEMENT_TYPE_U8:
4457-
case ELEMENT_TYPE_R4:
4458-
case ELEMENT_TYPE_R8:
4459-
result = asCorInfoType(ty);
4460-
break;
4449+
case ELEMENT_TYPE_I1:
4450+
result = CORINFO_TYPE_BYTE;
4451+
break;
4452+
case ELEMENT_TYPE_U1:
4453+
result = CORINFO_TYPE_UBYTE;
4454+
break;
4455+
case ELEMENT_TYPE_I2:
4456+
result = CORINFO_TYPE_SHORT;
4457+
break;
4458+
case ELEMENT_TYPE_U2:
4459+
result = CORINFO_TYPE_USHORT;
4460+
break;
4461+
case ELEMENT_TYPE_I4:
4462+
result = CORINFO_TYPE_INT;
4463+
break;
4464+
case ELEMENT_TYPE_U4:
4465+
result = CORINFO_TYPE_UINT;
4466+
break;
4467+
case ELEMENT_TYPE_I8:
4468+
result = CORINFO_TYPE_LONG;
4469+
break;
4470+
case ELEMENT_TYPE_U8:
4471+
result = CORINFO_TYPE_ULONG;
4472+
break;
4473+
case ELEMENT_TYPE_R4:
4474+
result = CORINFO_TYPE_FLOAT;
4475+
break;
4476+
case ELEMENT_TYPE_R8:
4477+
result = CORINFO_TYPE_DOUBLE;
4478+
break;
44614479

4462-
default:
4463-
break;
4480+
default:
4481+
// Error case, we will return CORINFO_TYPE_UNDEF
4482+
break;
44644483
}
44654484

44664485
JIT_TO_EE_TRANSITION_LEAF();

0 commit comments

Comments
 (0)