Skip to content

Commit 2b5d3be

Browse files
authored
Fix "same try" in interpreter compiler (#120803)
The COR_ILEXCEPTION_CLAUSE_SAMETRY was never set in the generated EH info due to a bug. I've also fixed a minor debug logging issue - fault clauses were missing in the dumped EH clauses
1 parent 3be0023 commit 2b5d3be

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/coreclr/interpreter/compiler.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1615,17 +1615,24 @@ void InterpCompiler::BuildEHInfo()
16151615
nativeClause.Flags = (CORINFO_EH_CLAUSE_FLAGS)((int)nativeClause.Flags | COR_ILEXCEPTION_CLAUSE_SAMETRY);
16161616
}
16171617

1618+
lastTryILOffset = clause.TryOffset;
1619+
lastTryILLength = clause.TryLength;
1620+
16181621
m_compHnd->setEHinfo(nativeEHIndex++, &nativeClause);
16191622

16201623
INTERP_DUMP(" try [IR_%04x(%x), IR_%04x(%x)) ", tryStartNativeOffset, clause.TryOffset, tryEndNativeOffset, clause.TryOffset + clause.TryLength);
16211624
if (clause.Flags == CORINFO_EH_CLAUSE_FILTER)
16221625
{
16231626
INTERP_DUMP("filter IR_%04x(%x), handler [IR_%04x(%x), IR_%04x(%x))%s\n", pFilterStartBB->nativeOffset, clause.FilterOffset, handlerStartNativeOffset, clause.HandlerOffset, handlerEndNativeOffset, clause.HandlerOffset + clause.HandlerLength, ((int)nativeClause.Flags & COR_ILEXCEPTION_CLAUSE_SAMETRY) ? " (same try)" : "");
16241627
}
1625-
else if (nativeClause.Flags == CORINFO_EH_CLAUSE_FINALLY)
1628+
else if (clause.Flags == CORINFO_EH_CLAUSE_FINALLY)
16261629
{
16271630
INTERP_DUMP("finally handler [IR_%04x(%x), IR_%04x(%x))\n", handlerStartNativeOffset, clause.HandlerOffset, handlerEndNativeOffset, clause.HandlerOffset + clause.HandlerLength);
16281631
}
1632+
else if (clause.Flags == CORINFO_EH_CLAUSE_FAULT)
1633+
{
1634+
INTERP_DUMP("fault handler [IR_%04x(%x), IR_%04x(%x))\n", handlerStartNativeOffset, clause.HandlerOffset, handlerEndNativeOffset, clause.HandlerOffset + clause.HandlerLength);
1635+
}
16291636
else
16301637
{
16311638
INTERP_DUMP("catch handler [IR_%04x(%x), IR_%04x(%x))%s\n", handlerStartNativeOffset, clause.HandlerOffset, handlerEndNativeOffset, clause.HandlerOffset + clause.HandlerLength, ((int)nativeClause.Flags & COR_ILEXCEPTION_CLAUSE_SAMETRY) ? " (same try)" : "");

0 commit comments

Comments
 (0)