< prev index next >

test/jdk/java/foreign/TestUpcall.java

Print this page
@@ -28,11 +28,17 @@
   *          jdk.incubator.foreign/jdk.internal.foreign
   *          jdk.incubator.foreign/jdk.internal.foreign.abi
   *          java.base/sun.security.action
   * @build NativeTestHelper CallGeneratorHelper TestUpcall
   *
-  * @run testng/othervm -Dforeign.restricted=permit TestUpcall
+  * @run testng/othervm
+  *   -Dforeign.restricted=permit
+  *   TestUpcall
+  * @run testng/othervm
+  *   -Dforeign.restricted=permit
+  *   -Djdk.internal.foreign.ProgrammableInvoker.NO_SPEC=true
+  *   TestUpcall
   */
  
  import jdk.incubator.foreign.CSupport;
  import jdk.incubator.foreign.FunctionDescriptor;
  import jdk.incubator.foreign.GroupLayout;

@@ -136,11 +142,10 @@
          }
          args[params.size()] = makeCallback(ret, params, fields, checks, argChecks);
          return args;
      }
  
-     @SuppressWarnings("unchecked")
      static MemoryAddress makeCallback(Ret ret, List<ParamType> params, List<StructFieldType> fields, List<Consumer<Object>> checks, List<Consumer<Object[]>> argChecks) {
          if (params.isEmpty()) {
              return dummyAddress;
          }
  

@@ -154,22 +159,22 @@
              Class<?> carrier = paramCarrier(layout);
              mh = mh.asType(mh.type().changeParameterType(i, carrier));
  
              final int finalI = i;
              if (carrier == MemorySegment.class) {
-                 argChecks.add(o -> assertStructEquals((MemorySegment) o[finalI], (MemorySegment) box.get()[finalI], layout));
+                 argChecks.add(o -> assertStructEquals((MemorySegment) box.get()[finalI], (MemorySegment) o[finalI], layout));
              } else {
-                 argChecks.add(o -> assertEquals(o[finalI], box.get()[finalI]));
+                 argChecks.add(o -> assertEquals(box.get()[finalI], o[finalI]));
              }
          }
  
          ParamType firstParam = params.get(0);
          MemoryLayout firstlayout = firstParam.layout(fields);
          Class<?> firstCarrier = paramCarrier(firstlayout);
  
          if (firstCarrier == MemorySegment.class) {
-             checks.add(o -> assertStructEquals((MemorySegment) o, (MemorySegment) box.get()[0], firstlayout));
+             checks.add(o -> assertStructEquals((MemorySegment) box.get()[0], (MemorySegment) o, firstlayout));
          } else {
              checks.add(o -> assertEquals(o, box.get()[0]));
          }
  
          mh = mh.asType(mh.type().changeReturnType(ret == Ret.VOID ? void.class : firstCarrier));

@@ -180,17 +185,17 @@
                  : FunctionDescriptor.ofVoid(paramLayouts);
          MemoryAddress stub = abi.upcallStub(mh, func).baseAddress();
          return stub;
      }
  
-     private static void assertStructEquals(MemorySegment s1, MemorySegment s2, MemoryLayout layout) {
-         assertEquals(s1.byteSize(), s2.byteSize());
+     private static void assertStructEquals(MemorySegment actual, MemorySegment expected, MemoryLayout layout) {
+         assertEquals(actual.byteSize(), expected.byteSize());
          GroupLayout g = (GroupLayout) layout;
          for (MemoryLayout field : g.memberLayouts()) {
              if (field instanceof ValueLayout) {
                  VarHandle vh = g.varHandle(vhCarrier(field), MemoryLayout.PathElement.groupElement(field.name().orElseThrow()));
-                 assertEquals(vh.get(s1.baseAddress()), vh.get(s2.baseAddress()));
+                 assertEquals(vh.get(actual.baseAddress()), vh.get(expected.baseAddress()));
              }
          }
      }
  
      private static Class<?> vhCarrier(MemoryLayout layout) {
< prev index next >