Hi, This mail thread is for discussing Java 6 verification issues related to dead-code. The issue was first brought up by Mikhail Loenko in the "[drlvm][verifier] Using the Harmony verifier code for computing the StackMapTable attribute" mail thread.
Here's a general overview of this subject for anyone who wishes to join this discussion: the Java 6 verifier requires the presence of StackMap data at the beginning of each basic block. This requirements is true for all types of blocks, including "dead-blocks" (i.e., blocks unreachable from the first block in a method's control-flow graph). The problem is that StackMaps are computed using a control-flow/data-flow algorithm which (by definition) processes only reachable blocks, and hence cannot be used on "dead" blocks. In short - StackMaps cannot be computed for "dead" blocks. So, the main question is this: what do we do with dead blocks? How do we compute their StackMaps? One possible option is to remove the dead-code from the method by means of a dead-code removal algorithm applied to the method byte codes. Another possible option (implemented by the ASM BCI library) is to "nop" all instructions in the dead block up to the last one, modify the last instruction to "athrow" and assigning a StackMap of [][java/lang/Throwable] to this block [1]. Any other thoughts, suggestions or ideas? Thanks, Asaf [1] ASM developer guide: http://asm.objectweb.org/doc/developer-guide.html#deadcode __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
