You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Egor Pasko (JIRA)" <ji...@apache.org> on 2007/03/09 18:43:09 UTC

[jira] Commented: (HARMONY-2113) [drlvm][jit][opt] Jitrino.OPT loops infinitely in inlineJSR() when an exception from a subroutine (JSR->RET) is expected

    [ https://issues.apache.org/jira/browse/HARMONY-2113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12479663 ] 

Egor Pasko commented on HARMONY-2113:
-------------------------------------

Igor, In the proposed patch you fix only a specific CFG configuration. It detects only throws that are in the same block with the JSR inst target. But, unfortunately, blocks can be split. Or 'throw' instruction may be under an 'if' statement. Your patch does not fix these situations.

I propose to check reachability of 'throw' from JSR (limited by the corresponding RET inst). In case of such 'throw' is found, consider a non-returning JSR and convert to branch. The Spec guarantees that there is not more than one RET for each JSR, otherwise the bytecode should be rejected by the verifier. (It is not the case for the Apache Harmony verifier which does not support soubroutine verification)

> [drlvm][jit][opt] Jitrino.OPT loops infinitely in inlineJSR() when an exception from a subroutine (JSR->RET) is expected
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-2113
>                 URL: https://issues.apache.org/jira/browse/HARMONY-2113
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: any
>            Reporter: Egor Pasko
>            Priority: Minor
>         Attachments: ExcInFinallyTest.j, HARMONY-2113-regtest.patch, HARMONY-2113.patch
>
>
> Jitrino.OPT loops infinitely in inlineJSR() when an exception from a subroutine (JSR->RET) is expected
> To reproduce:
> * compile the attached hand-crafted Jasmin source ExcInFinallyTest.j:
> java -jar jasmin.jar ExcInFinallyTest.j
> * run on OPT:
> $HARMONY -Xem:opt ExcInFinallyTest
> you will get an infinite loop (in compilation). This test passes on Jitrino.JET and interpreter.
> If you rebuild Jitrino in debug mode, the following assertion would be caught:
> java: /export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/optimizer/FlowGraph.cpp:457: void Jitrino::findNodesInRegion(Jitrino::Node*, Jitrino::Node*, Jitrino::StlBitVector&): Assertion `!inEdges.empty()' failed.
> SIGABRT in VM code.
> Stack trace:
>         1: ?? (??:-1)
>         2: abort (??:-1)
>         3: __assert_fail (??:-1)
>         4: findNodesInRegion (/export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/optimizer/FlowGraph.cpp:458)
>         5: inlineJSR (/export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/optimizer/FlowGraph.cpp:572)
>         6: inlineJSRs (/export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/optimizer/FlowGraph.cpp:658)
>         7: Jitrino::FlowGraph::doTranslatorCleanupPhase(Jitrino::IRManager&) (/export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/optimizer/FlowGraph.cpp:833)
>         8: Jitrino::TranslatorSession::postTranslatorCleanup() (/export/users/evpasko/svn/3/trunk/working_vm/vm/jitrino/src/translator/TranslatorIntfc.cpp:77)
> [snip]
> obviously, the bug is in the subroutine inlining algorithm

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.