Oscar N created GROOVY-11630: -------------------------------- Summary: Extraneous bytecode generated after calls to void DGM methods Key: GROOVY-11630 URL: https://issues.apache.org/jira/browse/GROOVY-11630 Project: Groovy Issue Type: Bug Components: class generator, Compiler, Static compilation Affects Versions: 5.0.0-alpha-12 Reporter: Oscar N
I have the following code: {code:groovy} import groovy.transform.CompileStatic @CompileStatic final class DGMUsage { static void main(String[] args) { println "Groovy version: ${GroovySystem.version}" var list = (1..100).toList() list.shuffle() } } {code} When looking at the compiled output, null is pushed to the stack then immediately popped for DGMs that have a void return type: {code:java} // access flags 0x89 public static varargs main([Ljava/lang/String;)V L0 LINENUMBER 6 L0 LDC LDGMUsage;.class NEW org/codehaus/groovy/runtime/GStringImpl DUP ICONST_1 ANEWARRAY java/lang/Object DUP ICONST_0 INVOKESTATIC groovy/lang/GroovySystem.getVersion ()Ljava/lang/String; AASTORE ICONST_2 ANEWARRAY java/lang/String DUP ICONST_0 LDC "Groovy version: " AASTORE DUP ICONST_1 LDC "" AASTORE INVOKESPECIAL org/codehaus/groovy/runtime/GStringImpl.<init> ([Ljava/lang/Object;[Ljava/lang/String;)V INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.println (Ljava/lang/Object;Ljava/lang/Object;)V ACONST_NULL POP L1 LINENUMBER 8 L1 NEW groovy/lang/IntRange DUP ICONST_1 ICONST_1 ICONST_1 BIPUSH 100 INVOKESPECIAL groovy/lang/IntRange.<init> (ZZII)V INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.toList (Ljava/lang/Iterable;)Ljava/util/List; ASTORE 1 L2 LINENUMBER 9 L2 ALOAD 1 INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.shuffle (Ljava/util/List;)V ACONST_NULL POP L3 LINENUMBER 10 L3 RETURN LOCALVARIABLE args [Ljava/lang/String; L0 L3 0 LOCALVARIABLE list Ljava/util/List; L2 L3 1 MAXSTACK = 8 MAXLOCALS = 2 {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)