diff --git a/src/coreclr/interpreter/compiler.cpp b/src/coreclr/interpreter/compiler.cpp index d41b97e49a8292..c07e54be8e43b4 100644 --- a/src/coreclr/interpreter/compiler.cpp +++ b/src/coreclr/interpreter/compiler.cpp @@ -2554,24 +2554,18 @@ void InterpCompiler::EmitCall(CORINFO_RESOLVED_TOKEN* constrainedClass, bool rea } m_pLastNewIns->data[0] = GetDataItemIndex(callInfo.hMethod); } + else if ((callInfo.classFlags & CORINFO_FLG_ARRAY) && newObj) + { + AddIns(INTOP_NEWMDARR); + m_pLastNewIns->data[0] = GetDataItemIndex(resolvedCallToken.hClass); + m_pLastNewIns->data[1] = callInfo.sig.numArgs; + } else if (isCalli) { AddIns(INTOP_CALLI); m_pLastNewIns->data[0] = GetDataItemIndex(calliCookie); m_pLastNewIns->SetSVars2(CALL_ARGS_SVAR, callIFunctionPointerVar); } - else if ((callInfo.classFlags & CORINFO_FLG_ARRAY) && !readonly) - { - CORINFO_SIG_INFO ctorSignature; - CORINFO_CLASS_HANDLE ctorClass; - - m_compHnd->getMethodSig(resolvedCallToken.hMethod, &ctorSignature); - ctorClass = m_compHnd->getMethodClass(resolvedCallToken.hMethod); - - AddIns(INTOP_NEWMDARR); - m_pLastNewIns->data[0] = GetDataItemIndex(ctorClass); - m_pLastNewIns->data[1] = numArgs; - } else { // Normal call diff --git a/src/coreclr/vm/interpexec.cpp b/src/coreclr/vm/interpexec.cpp index f29ae684e12027..87466f550ee772 100644 --- a/src/coreclr/vm/interpexec.cpp +++ b/src/coreclr/vm/interpexec.cpp @@ -152,15 +152,15 @@ static void InterpBreakpoint() } #endif -static OBJECTREF CreateMultiDimArray(MethodTable* arrayClass, int8_t* stack, int32_t dimsOffset, int rank) +static OBJECTREF CreateMultiDimArray(MethodTable* arrayClass, int8_t* stack, int32_t dimsOffset, int numArgs) { - int32_t* dims = (int32_t*)alloca(rank * sizeof(int32_t)); - for (int i = 0; i < rank; i++) + int32_t* dims = (int32_t*)alloca(numArgs * sizeof(int32_t)); + for (int i = 0; i < numArgs; i++) { dims[i] = *(int32_t*)(stack + dimsOffset + i * 8); } - return AllocateArrayEx(arrayClass, dims, rank); + return AllocateArrayEx(arrayClass, dims, numArgs); } #define LOCAL_VAR_ADDR(offset,type) ((type*)(stack + (offset)))