java.lang.StackOverflowError in Lowering

Brian Goetz brian.goetz at oracle.com
Wed Jun 22 07:31:29 PDT 2011


And for using the one-element-array trick to work around the mutable 
capture restriction, your license to code in Java has been permanently 
revoked.  Please turn in your keyboard, and security will escort you out 
of the building.

On 6/22/2011 10:26 AM, Ali Ebrahimi wrote:
> Hi Maurizio,
> I'm working on converting statefull lambdas to stateless ones and discovered
> following StackOverflowError error.
>
> Test case:
> class Test{
>     static class D {
>
>          int[] grandTotal = {0};  //******************************
>          public void foo() {
>
>              MList<Department>  departments = new MList.MListImpl<>();
>
>              MList<Employee>  employees = new MList.MListImpl<>();
>
>              departments.forEach( #{Department d ->
>                  int[] deptTotal = {0};
>                  employees.filter(#{Employee e ->  e.dept == d
>                  }).forEach(#{Employee e ->
>                      deptTotal[0] += e.salary;
>                      grandTotal[0] += e.salary;
>                  });
>                  System.out.printf("Total for dept %s = %d \n",
>                          d.name, deptTotal[0]);
>              });
>                  System.out.printf("Grant total = %d \n", grandTotal[0]);
>              }
>      }
>
> Error Report:
>
> Information:The system is out of resources.
> Information:Consult the following stack trace for details.
> Information:java.lang.StackOverflowError
> Information:    at
> com.sun.tools.javac.code.Symbol$ClassSymbol.isSubClass(Symbol.java:802)
> Information:    at
> com.sun.tools.javac.code.Symbol.isMemberOf(Symbol.java:322)
> Information:    at com.sun.tools.javac.comp.Lower.access(Lower.java:1138)
> Information:    at com.sun.tools.javac.comp.Lower.access(Lower.java:1189)
> Information:    at
> com.sun.tools.javac.comp.Lower.makeOwnerThisN(Lower.java:1720)
> Information:    at
> com.sun.tools.javac.comp.Lower.makeOwnerThis(Lower.java:1704)
> Information:    at
> com.sun.tools.javac.comp.Lower.accessBase(Lower.java:1013)
> Information:    at com.sun.tools.javac.comp.Lower.access(Lower.java:1175)
> Information:Compilation completed with 1 error and 0 warnings
> Information:1 error
> Information:0 warnings
> Error:Compiler internal error. Process terminated with exit code 3
>
> One Note:
> if you move "int[] grandTotal = {0};" into foo method, the error goes away.
>
> Best Regards,
> Ali Ebrahimi
>


More information about the lambda-dev mailing list