assertion in ciTypeFlow OSR'ing in finally clause
goetz.lindenmaier at sap.com
Mon Feb 17 05:56:14 PST 2014
I get an assertion in ciTypeFlow running the ppc port with DeotimizeALot.
It tries to osr-compile a method at a bytecode in a finally clause.
As far as I understand the assertion is too strict.
The initial assertion is
# Internal Error (/sapmnt/home1/d045726/oJ/raw-2-stage-hotspot/src/share/vm/ci/ciTypeFlow.cpp:218), pid=7287, tid=4398488891968
# assert(return_address->is_return_address()) failed: verify: wrong type
This happens because a block in the finally clause is analyzed while not
both predecessor blocks have been looked at. Thus the join of the
slots that should contain the return address yields bottom, and the assertion
To get the dbg build passing, I have to remove 5 assertions:
ciTypeFlow.cpp:195 assert(false, "verify: returning from invalid subroutine");
ciTypeFlow.cpp:218 assert(return_address->is_return_address(), "verify: wrong type");
ciTypeFlow.cpp:812 assert(address->is_return_address(), "bad return address");
ciTypeFlow.cpp:1758 assert(return_address->is_return_address(), "verify: wrong type");
ciMetadata.hpp:83 assert(is_return_address(), "bad cast");
If I remove these, compilation is aborted a bit later with the message:
"COMPILE SKIPPED: OSR starts with non-empty stack (not retryable)"
I wonder whether I should fix this by adapting the assertions, or
whether I should abort the compilation right away.
I would appreciate some comments on this issue!
More information about the hotspot-dev