You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2021/03/02 15:02:00 UTC

[jira] [Resolved] (GROOVY-9938) VerifyError when instantiating class with @CompileStatic that implements a method with @DelegatesTo annotation.

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

Eric Milles resolved GROOVY-9938.
---------------------------------
    Fix Version/s: 4.0.0-alpha-3
       Resolution: Fixed

> VerifyError when instantiating class with @CompileStatic that implements a method with @DelegatesTo annotation.
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9938
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9938
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.5.6, 3.0.7
>         Environment: Windows 10, Java 11
>            Reporter: Felix ter Beek
>            Assignee: Eric Milles
>            Priority: Major
>             Fix For: 4.0.0-alpha-3
>
>         Attachments: script.groovy
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Please see the script in the attachment for a minimal code sample to reproduce this issue.
> This issue occurs both when implementing a trait, or when implementing an interface and using @Delegate to provide the implementation of the interface. Writing the implementation directly in the class works fine.
> When I take out either @CompileStatic or @DelegatesTo the issue disappears.
>  
> stacktrace (groovy 3.0.7, using a trait (first example in script)):
> ERROR java.lang.VerifyError:
> Bad type on operand stack
> Exception Details:
>  Location:
>  P$C.P$Ttrait$super$stuff(Lgroovy/lang/Closure;)V @8: invokevirtual
>  Reason:
>  Type 'P$C' (current frame, stack[0]) is not assignable to 'groovy/lang/Closure'
>  Current Frame:
>  bci: @8
>  flags: \{ }
>  locals: \{ 'P$C', 'groovy/lang/Closure' }
>  stack: \{ 'P$C' }
>  Bytecode:
>  0000000: 2ac1 003c 9900 232a b600 42c0 000d b900
>  0000010: 4501 0012 4604 bd00 0459 032b 53b8 004c
>  0000020: c000 4e57 a700 1712 042a 1246 c000 5004
>  0000030: bd00 0459 032b 53b8 0056 57b1
>  Stackmap Table:
>  same_frame(@39)
>  same_frame(@59)
> at P.run (groovysh_evaluate:13)
>  at P$run.call (Unknown Source)
>  
>  
> stacktrace (groovy 3.0.7, using @Delegate (second example in script)):
> ERROR java.lang.VerifyError:
> Bad type on operand stack
> Exception Details:
>  Location:
>  P2$C.stuff(Lgroovy/lang/Closure;)V @1: invokevirtual
>  Reason:
>  Type 'P2$C' (current frame, stack[0]) is not assignable to 'groovy/lang/Closure'
>  Current Frame:
>  bci: @1
>  flags: \{ }
>  locals: \{ 'P2$C', 'groovy/lang/Closure' }
>  stack: \{ 'P2$C' }
>  Bytecode:
>  0000000: 2ab6 002f c000 0b2b b600 3101 57b1
> at P2.run (groovysh_evaluate:19)
>  at P2$run.call (Unknown Source)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)