Chiang Seng Chang created GROOVY-9737: -----------------------------------------
Summary: Groovy 3.0.5 VerifyError overloading static method in superclass Key: GROOVY-9737 URL: https://issues.apache.org/jira/browse/GROOVY-9737 Project: Groovy Issue Type: Bug Affects Versions: 3.0.5 Reporter: Chiang Seng Chang Attachments: g3ve.tar.gz java.lang.VerifyError instantiating a concrete class if superclass has static and non-static overloading methods. superclass: {noformat} package bar import groovy.transform.CompileStatic @CompileStatic abstract class SuperProblem { static void fun(Integer i) {} protected void fun(String s) {} } {noformat} concrete class: {noformat} package foo import bar.SuperProblem import groovy.transform.CompileStatic @CompileStatic class Problem extends SuperProblem { protected void doit() { fun('') } } {noformat} harness: {noformat} package app import foo.Problem import groovy.transform.CompileStatic @CompileStatic class Test { static void main(String[] args) { Problem problem = new Problem() println('SHOULD NOT SEE THIS BECAUSE IT MEANS Class Problem HAS NO PROBLEM!!!') } } {noformat} Observations: # No compilation error. # Superclass must be in a different package. # Groovy 2.5.13 has no such issue. I have included the test project, {noformat} ./gradlew run {noformat} produces this error: {noformat} % ./gradlew run > Task :run FAILED Exception in thread "main" java.lang.VerifyError: Bad access to protected data in invokevirtual Exception Details: Location: foo/Problem.doit()V @12: invokevirtual Reason: Type 'bar/SuperProblem' (current frame, stack[0]) is not assignable to 'foo/Problem' Current Frame: bci: @12 flags: { } locals: { 'foo/Problem' } stack: { 'bar/SuperProblem', 'java/lang/String' } Bytecode: 0x0000000: 1202 1204 b800 17c0 0004 1219 b600 1d01 0x0000010: 57b1 at app.Test.main(Test.groovy:13) {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)