From 29fabe7114d006af73ef768c529b4477b355a284 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 9 Apr 2019 15:28:00 -0700 Subject: [PATCH] Don't denormalize enum return values on instance methods on x86. (#23816) * Don't denormalize enum return values on instance methods on x86. * Reuse closedElemType. --- src/vm/mlinfo.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/vm/mlinfo.cpp b/src/vm/mlinfo.cpp index 2e675fd..985eefe 100644 --- a/src/vm/mlinfo.cpp +++ b/src/vm/mlinfo.cpp @@ -1652,7 +1652,19 @@ MarshalInfo::MarshalInfo(Module* pModule, } else { - mtype = sig.PeekElemTypeClosed(pModule, pTypeContext); + SigPointer sigtmp = sig; + CorElementType closedElemType = sigtmp.PeekElemTypeClosed(pModule, pTypeContext); + if (closedElemType == ELEMENT_TYPE_VALUETYPE) + { + TypeHandle th = sigtmp.GetTypeHandleThrowing(pModule, pTypeContext); + // If the return type of an instance method is a value-type we need the actual return type. + // However, if the return type is an enum, we can normalize it. + if (!th.IsEnum()) + { + mtype = closedElemType; + } + } + } #endif // _TARGET_X86_ -- 2.7.4