Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8244938

Crash in foreign ABI CallArranger class when a test native function returns a nested struct

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • None
    • repo-panama
    • tools
    • generic
    • generic

      File: t.h

      struct Point2D {
         int i, j;
      };

      struct Point {
        int k;
        struct Point2D point2d;
      };

      struct Point func(void);

      File: t.c


      #include "t.h"
        
      struct Point point = { 44, { 567, 33 } };
      struct Point func(void) {
          return point;
      }

      File: Main.java

      import static org.acme.t_h.*;
        
      class Main {
          public static void main(String[] args) {
               System.out.println(CPoint.$LAYOUT());
               System.out.println(func());
          }
      }

      File: compile.sh

      cc -shared -o libt.dylib t.c
      jextract -t org.acme -l t t.h
      javac --add-modules jdk.incubator.foreign Main.java

      File: run.sh

      java --add-modules jdk.incubator.foreign -Dforeign.restricted=permit Main


      When running, the above results in the following stack trace:

       java.lang.BootstrapMethodError: bootstrap method initialization exception
      at org.acme.t_h.func(t_h.java:20)
      at Main.main(Main.java:6)
      Caused by: java.lang.BootstrapMethodError: bootstrap method initialization exception
      at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:194)
      at java.base/java.lang.invoke.ConstantBootstraps.makeConstant(ConstantBootstraps.java:72)
      at java.base/java.lang.invoke.MethodHandleNatives.linkDynamicConstantImpl(MethodHandleNatives.java:326)
      at java.base/java.lang.invoke.MethodHandleNatives.linkDynamicConstant(MethodHandleNatives.java:318)
      at org.acme.t_h$constants.func$MH(Unknown Source)
      at org.acme.t_h.func(t_h.java:18)
      ... 1 more
      Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
      at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.CallArranger$StorageCalculator.structStorages(CallArranger.java:262)
      at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.CallArranger$BoxBindingCalculator.getBindings(CallArranger.java:368)
      at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.CallArranger.getBindings(CallArranger.java:111)
      at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.CallArranger.arrangeDowncall(CallArranger.java:130)
      at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.SysVx64ABI.downcallHandle(SysVx64ABI.java:61)
      at org.acme.RuntimeHelper.lambda$downcallHandle$2(RuntimeHelper.java:62)

            mcimadamore Maurizio Cimadamore
            sundar Sundararajan Athijegannathan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: