Skip to content

Commit 59b313f

Browse files
committed
Workaround for compiler reordering the InterpMethodContextFrame and the InterpreterFrame
1 parent 36ad5df commit 59b313f

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/coreclr/vm/prestub.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1946,16 +1946,25 @@ extern "C" void STDCALL ExecuteInterpretedMethod(TransitionBlock* pTransitionBlo
19461946
InterpThreadContext *threadContext = InterpGetThreadContext();
19471947
int8_t *sp = threadContext->pStackPointer;
19481948

1949-
InterpMethodContextFrame interpMethodContextFrame = {0};
1950-
interpMethodContextFrame.startIp = (int32_t*)byteCodeAddr;
1951-
interpMethodContextFrame.pStack = sp;
1952-
interpMethodContextFrame.pRetVal = sp;
1949+
struct Frames
1950+
{
1951+
InterpMethodContextFrame interpMethodContextFrame = {0};
1952+
InterpreterFrame interpreterFrame;
1953+
1954+
Frames(TransitionBlock *pTransitionBlock)
1955+
: interpreterFrame(pTransitionBlock, &interpMethodContextFrame)
1956+
{
1957+
}
1958+
}
1959+
frames(pTransitionBlock);
19531960

1954-
InterpreterFrame interpreterFrame(pTransitionBlock, &interpMethodContextFrame);
1961+
frames.interpMethodContextFrame.startIp = (int32_t*)byteCodeAddr;
1962+
frames.interpMethodContextFrame.pStack = sp;
1963+
frames.interpMethodContextFrame.pRetVal = sp;
19551964

1956-
InterpExecMethod(&interpreterFrame, &interpMethodContextFrame, threadContext);
1965+
InterpExecMethod(&frames.interpreterFrame, &frames.interpMethodContextFrame, threadContext);
19571966

1958-
interpreterFrame.Pop();
1967+
frames.interpreterFrame.Pop();
19591968
}
19601969
#endif // FEATURE_INTERPRETER
19611970

0 commit comments

Comments
 (0)