[ 
https://issues.apache.org/jira/browse/BCEL-195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Emmanuel Bourg updated BCEL-195:
--------------------------------
    Description: [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.  (was: revision 1532198 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.)

> 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
>            Reporter: Mark Roberts
>
> [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