You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Oscar N (Jira)" <ji...@apache.org> on 2024/01/18 15:09:00 UTC

[jira] [Created] (GROOVY-11288) Unnecessary bytecode generated after variable assignment

Oscar N created GROOVY-11288:
--------------------------------

             Summary: Unnecessary bytecode generated after variable assignment
                 Key: GROOVY-11288
                 URL: https://issues.apache.org/jira/browse/GROOVY-11288
             Project: Groovy
          Issue Type: Bug
          Components: bytecode, Compiler
    Affects Versions: 4.0.17, 5.0.0-alpha-4, 3.0.20, 2.5.23
            Reporter: Oscar N


I have the following code:
{code:groovy}
package org.example

import groovy.transform.CompileStatic

@CompileStatic
final class Main {
    static void main(String[] args) {
        int three = 3
        String str = 'foo'
    }
}
{code}

When looking at the compiled output, the variable is loaded and immediately popped after storing:
{code:java}
// access flags 0x89
public static varargs main([Ljava/lang/String;)V
 L0
  LINENUMBER 8 L0
  ICONST_3
  ISTORE 1
 L1
  ILOAD 1
  POP
 L2
  LINENUMBER 9 L2
  LDC "foo"
  ASTORE 2
 L3
  ALOAD 2
  POP
 L4
  LINENUMBER 10 L4
  RETURN
  LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
  LOCALVARIABLE three I L1 L4 1
  LOCALVARIABLE str Ljava/lang/String; L3 L4 2
  MAXSTACK = 1
  MAXLOCALS = 3
{code}

This issue also occurs in dynamic compilation mode.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)