harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Egor Pasko (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-2113) [drlvm][jit][opt] Jitrino.OPT loops infinitely in inlineJSR() when an exception from a subroutine (JSR->RET) is expected
Date Fri, 09 Mar 2007 17:43:09 GMT

    [ 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.


Mime
View raw message