Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6758445
Votes 0
Synopsis loop heads that are exception entry points can crash during count_edges/mark_loops
Category hotspot:compiler1
Reported Against
Release Fixed hs14(b08), hs11(b17) (Bug ID:2169325) , 7(b41) (Bug ID:2170007) , 6u12(b01) (Bug ID:2170221)
State 10-Fix Delivered, bug
Priority: 3-Medium
Related Bugs
Submit Date 10-OCT-2008
Description
Ok, I've just attached the files...too complicated to find somewhere to put them..

test.class is the class "ruby.test". jruby.jar is JRuby's jar. Run with:

java -client -cp jruby.jar:. ruby.test

(assuming you put the test.class in ./ruby)

It should crash under any version of JDK 6 client compiler.

I've also attached the Ruby source. If you want to just run it directly, and JRuby will compile it before run, do it like this:

java -jar jruby.jar org.jruby.Main test.rb

- Charlie
$ok = true

def getc
 if $ok
   $ok = false
   nil
 else
   $ok = true
   50
 end
end

def gets
 c = getc or return
 l = ""
 begin
   l.concat c unless c == "\r"
   break if c == "\n"
 end while c = getc
 l
end

loop { gets }
Posted Date : 2008-10-10 20:48:56.0
Work Around
N/A
Evaluation
So I'm looking at this crash and I'm seeing asserts that are unhappy about some loop structures that are being formed with exception handlers.  I think it's a throw of a BreakJump that goes to a handler which jumps into a loop.  I'm guessing that the problem is that it's producing a control structure you couldn't make from normal Java source.  In Java it would/might require multiple separate exception ranges.

I think it's something like this:

try
 if (something) throw BreakJump

 loop:
   .....

catch (BreakJump bj)
 goto loop

You'd have to build a structure like that in java source very differently and I think we'd handle that correctly but I don't think we've seen anything structured like this before.  We can probably fix this but you might want to think about a workaround given how long it takes for releases to make it into users hands.  I'll look into a fix for it.  How do I get a version of the class file that was generated? The test.class you sent me appeared to be corrupted in some way.

*** (#1 of 1): [ UNSAVED ]   xxxxx@xxxxx  
Posted Date : 2008-10-10 20:48:57.0

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/334969144810
Posted Date : 2008-11-12 16:15:36.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang