[ 
https://issues.apache.org/jira/browse/BCEL-195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14710190#comment-14710190
 ] 

Mark Roberts commented on BCEL-195:
-----------------------------------

Okay, I think I grok this now.  In a sense, we were both correct.  I think you 
are correct that you can share branches with the same target; but it didn't 
work properly due to problems in other code.  My change to 
InstructionComparator (inadvertently) worked around these problems.  There were 
two issues if you are going to share branch instructions:
- dispose cannot set the target to null because somebody else might be using it.
- you cannot allow duplicate targeters (interestingly, the 'fix' was in the 
code, but commented out)
targeters.diff has these changes.  Please review and see what you think.

I have not had a chance to review the changes to Select.java; I will try to get 
that done tomorrow.

> addition of hashCode() to generic/Instruction.java breaks Targeters
> -------------------------------------------------------------------
>
>                 Key: BCEL-195
>                 URL: https://issues.apache.org/jira/browse/BCEL-195
>             Project: Commons BCEL
>          Issue Type: Bug
>          Components: Main
>    Affects Versions: 6.0
>            Reporter: Mark Roberts
>         Attachments: bcel195.diff, targeters.diff
>
>
> [Revision 1532198|http://svn.apache.org/r1532198] added a {{hashCode()}} 
> function to the Instruction class.  Unfortunately, this breaks the 
> Instruction targeting mechanism. I understand the goal of trying to reuse 
> instructions - an 'iadd' is the same as any other 'iadd'.  However,  one 
> 'goto 50' is not the same as another 'goto 50' due to the way Targeters are 
> implemented.  If branch instructions are reused, then only one entry gets put 
> on the Targeter list.  So when some api is used to modify the instruction 
> list and location 50 becomes location 52 ONLY ONE of the branches gets 
> updated. A very bad thing.  So unless you modify the hash to special case 
> branch instructions (and there might be other instructions needing special 
> treatment as well) its broken.  We fixed it by simply commenting the hash out 
> to make things like they used to be and all works great.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to