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

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

There is no space/performance hit  because they were never unique.  They are 
not defined in InstructionConstants so  Instruction.readInstruction always 
creates a new instance for every branch instruction (among others).  I guess I 
hadn't made that clear before.  The only purpose of my change to 
InstructionComparator  is to trick the current targeter design into working the 
way I think it should (via tricking HashSet). 

Daikon does branch instruction replacement all the time - but that would be the 
opposite of a very basic test case.  :-)




> 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