Revert "ART: Compiler support for invoke-polymorphic."

This reverts commit 02e3092f8d98f339588e48691db77f227b48ac1e.

Reasons for revert:

- Breaks MIPS/MIPS64 build.
- Fails under GCStress test on x64.
- Different x64 build configuration doesn't like relocation.

Change-Id: I512555b38165d05f8a07e8aed528f00302061001
diff --git a/test/953-invoke-polymorphic-compiler/build b/test/953-invoke-polymorphic-compiler/build
deleted file mode 100755
index a423ca6..0000000
--- a/test/953-invoke-polymorphic-compiler/build
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# make us exit on a failure
-set -e
-
-if [[ $@ != *"--jvm"* ]]; then
-  # Don't do anything with jvm.
-  export USE_JACK=true
-fi
-
-./default-build "$@" --experimental method-handles
diff --git a/test/953-invoke-polymorphic-compiler/expected.txt b/test/953-invoke-polymorphic-compiler/expected.txt
deleted file mode 100644
index f47ee23..0000000
--- a/test/953-invoke-polymorphic-compiler/expected.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Running Main.Min2Print2([33, -4])
-Running Main.Min2Print2([-4, 33])
-Running Main.Min2Print3([33, -4, 17])
-Running Main.Min2Print3([-4, 17, 33])
-Running Main.Min2Print3([17, 33, -4])
-Running Main.Min2Print6([33, -4, 77, 88, 99, 111])
-Running Main.Min2Print6([-4, 77, 88, 99, 111, 33])
-Running Main.Min2Print6([77, 88, 99, 111, 33, -4])
-Running Main.Min2Print6([88, 99, 111, 33, -4, 77])
-Running Main.Min2Print6([99, 111, 33, -4, 77, 88])
-Running Main.Min2Print6([111, 33, -4, 77, 88, 99])
-Running Main.Min2Print26([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25])
-Running Main.Min2Print26([25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
-Running Main.Min2Print26([24, 25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
-BasicTest done.
-$opt$ReturnBooleanTest done.
-$opt$ReturnCharTest done.
-$opt$ReturnByteTest done.
-$opt$ReturnShortTest done.
-$opt$ReturnIntTest done.
-$opt$ReturnLongTest done.
-$opt$ReturnFloatTest done.
-$opt$ReturnDoubleTest done.
-$opt$ReturnStringTest done.
-ReturnValuesTest done.
diff --git a/test/953-invoke-polymorphic-compiler/info.txt b/test/953-invoke-polymorphic-compiler/info.txt
deleted file mode 100644
index f1dbb61..0000000
--- a/test/953-invoke-polymorphic-compiler/info.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests for method handle invocations.
-
-NOTE: needs to run under ART or a Java 8 Language runtime and compiler.
diff --git a/test/953-invoke-polymorphic-compiler/run b/test/953-invoke-polymorphic-compiler/run
deleted file mode 100755
index a9f1822..0000000
--- a/test/953-invoke-polymorphic-compiler/run
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# make us exit on a failure
-set -e
-
-./default-run "$@" --experimental method-handles
diff --git a/test/953-invoke-polymorphic-compiler/src/Main.java b/test/953-invoke-polymorphic-compiler/src/Main.java
deleted file mode 100644
index 20a8fec..0000000
--- a/test/953-invoke-polymorphic-compiler/src/Main.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.invoke.MethodType;
-import java.lang.invoke.WrongMethodTypeException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class Main {
-  public static void assertTrue(boolean value) {
-    if (!value) {
-      throw new AssertionError("assertTrue value: " + value);
-    }
-  }
-
-  public static void assertFalse(boolean value) {
-    if (value) {
-      throw new AssertionError("assertTrue value: " + value);
-    }
-  }
-
-  public static void assertEquals(int i1, int i2) {
-    if (i1 == i2) { return; }
-    throw new AssertionError("assertEquals i1: " + i1 + ", i2: " + i2);
-  }
-
-  public static void assertEquals(long i1, long i2) {
-    if (i1 == i2) { return; }
-    throw new AssertionError("assertEquals l1: " + i1 + ", l2: " + i2);
-  }
-
-  public static void assertEquals(Object o, Object p) {
-    if (o == p) { return; }
-    if (o != null && p != null && o.equals(p)) { return; }
-    throw new AssertionError("assertEquals: o1: " + o + ", o2: " + p);
-  }
-
-  public static void assertEquals(String s1, String s2) {
-    if (s1 == s2) {
-      return;
-    }
-
-    if (s1 != null && s2 != null && s1.equals(s2)) {
-      return;
-    }
-
-    throw new AssertionError("assertEquals s1: " + s1 + ", s2: " + s2);
-  }
-
-  public static void fail() {
-    System.err.println("fail");
-    Thread.dumpStack();
-  }
-
-  public static void fail(String message) {
-    System.err.println("fail: " + message);
-    Thread.dumpStack();
-  }
-
-  public static int Min2Print2(int a, int b) {
-    int[] values = new int[] { a, b };
-    System.err.println("Running Main.Min2Print2(" + Arrays.toString(values) + ")");
-    return a > b ? a : b;
-  }
-
-  public static int Min2Print3(int a, int b, int c) {
-    int[] values = new int[] { a, b, c };
-    System.err.println("Running Main.Min2Print3(" + Arrays.toString(values) + ")");
-    return a > b ? a : b;
-  }
-
-  public static int Min2Print6(int a, int b, int c, int d, int e, int f) {
-    int[] values = new int[] { a, b, c, d, e, f };
-    System.err.println("Running Main.Min2Print6(" + Arrays.toString(values) + ")");
-    return a > b ? a : b;
-  }
-
-  public static int Min2Print26(int a, int b, int c, int d,
-                                int e, int f, int g, int h,
-                                int i, int j, int k, int l,
-                                int m, int n, int o, int p,
-                                int q, int r, int s, int t,
-                                int u, int v, int w, int x,
-                                int y, int z) {
-    int[] values = new int[] { a, b, c, d, e, f, g, h, i, j, k, l, m,
-                               n, o, p, q, r, s, t, u, v, w, x, y, z };
-    System.err.println("Running Main.Min2Print26(" + Arrays.toString(values) + ")");
-    return a > b ? a : b;
-  }
-
-  public static void $opt$BasicTest() throws Throwable {
-    MethodHandle mh;
-    mh = MethodHandles.lookup().findStatic(
-        Main.class, "Min2Print2", MethodType.methodType(int.class, int.class, int.class));
-    assertEquals((int) mh.invokeExact(33, -4), 33);
-    assertEquals((int) mh.invokeExact(-4, 33), 33);
-
-    mh = MethodHandles.lookup().findStatic(
-        Main.class, "Min2Print3",
-        MethodType.methodType(int.class, int.class, int.class, int.class));
-    assertEquals((int) mh.invokeExact(33, -4, 17), 33);
-    assertEquals((int) mh.invokeExact(-4, 17, 33), 17);
-    assertEquals((int) mh.invokeExact(17, 33, -4), 33);
-
-    mh = MethodHandles.lookup().findStatic(
-        Main.class, "Min2Print6",
-        MethodType.methodType(
-            int.class, int.class, int.class, int.class, int.class, int.class, int.class));
-    assertEquals((int) mh.invokeExact(33, -4, 77, 88, 99, 111), 33);
-    try {
-        // Too few arguments
-        assertEquals((int) mh.invokeExact(33, -4, 77, 88), 33);
-        fail("No WMTE for too few arguments");
-    } catch (WrongMethodTypeException e) {}
-    try {
-        // Too many arguments
-        assertEquals((int) mh.invokeExact(33, -4, 77, 88, 89, 90, 91), 33);
-        fail("No WMTE for too many arguments");
-    } catch (WrongMethodTypeException e) {}
-    assertEquals((int) mh.invokeExact(-4, 77, 88, 99, 111, 33), 77);
-    assertEquals((int) mh.invokeExact(77, 88, 99, 111, 33, -4), 88);
-    assertEquals((int) mh.invokeExact(88, 99, 111, 33, -4, 77), 99);
-    assertEquals((int) mh.invokeExact(99, 111, 33, -4, 77, 88), 111);
-    assertEquals((int) mh.invokeExact(111, 33, -4, 77, 88, 99), 111);
-
-    // A preposterous number of arguments.
-    mh = MethodHandles.lookup().findStatic(
-        Main.class, "Min2Print26",
-        MethodType.methodType(
-            // Return-type
-            int.class,
-            // Arguments
-            int.class, int.class, int.class, int.class, int.class, int.class, int.class, int.class,
-            int.class, int.class, int.class, int.class, int.class, int.class, int.class, int.class,
-            int.class, int.class, int.class, int.class, int.class, int.class, int.class, int.class,
-            int.class, int.class));
-    assertEquals(1, (int) mh.invokeExact(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-                                         13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25));
-    assertEquals(25, (int) mh.invokeExact(25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-                                         13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24));
-    assertEquals(25, (int) mh.invokeExact(24, 25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-                                         13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23));
-
-    try {
-        // Wrong argument type
-        mh.invokeExact("a");
-        fail("No WMTE for wrong arguments");
-    } catch (WrongMethodTypeException wmte) {}
-
-    try {
-        // Invoke on null handle.
-        MethodHandle mh0 = null;
-        mh0.invokeExact("bad");
-        fail("No NPE for you");
-    } catch (NullPointerException npe) {}
-
-    System.err.println("BasicTest done.");
-  }
-
-  private static boolean And(boolean lhs, boolean rhs) {
-    return lhs & rhs;
-  }
-
-  private static boolean Xor(boolean lhs, boolean rhs) {
-    return lhs ^ rhs;
-  }
-
-  private static String Multiply(String value, int n) {
-    String result = "";
-    for (int i = 0; i < n; ++i) {
-      result = value + result;
-    }
-    return result;
-  }
-
-  private static byte Multiply(byte value, byte n) {
-    return (byte)(value * n);
-  }
-
-  private static short Multiply(short value, short n) {
-    return (short)(value * n);
-  }
-
-  private static int Multiply(int value, int n) {
-    return value * n;
-  }
-
-  private static long Multiply(long value, long n) {
-    return value * n;
-  }
-
-  private static float Multiply(float value, float n) {
-    return value * n;
-  }
-
-  private static double Multiply(double value, double n) {
-    return value * n;
-  }
-
-  private static char Next(char c) {
-    return (char)(c + 1);
-  }
-
-  public static void $opt$ReturnBooleanTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh =
-            lookup.findStatic(Main.class, "And",
-                              MethodType.methodType(boolean.class, boolean.class, boolean.class));
-    assertEquals(true, (boolean) mh.invokeExact(true, true));
-    assertEquals(false, (boolean) mh.invokeExact(true, false));
-    assertEquals(false, (boolean) mh.invokeExact(false, true));
-    assertEquals(false, (boolean) mh.invokeExact(false, false));
-    assertEquals(true, (boolean) mh.invoke(true, true));
-    assertEquals(false, (boolean) mh.invoke(true, false));
-    assertEquals(false, (boolean) mh.invoke(false, true));
-    assertEquals(false, (boolean) mh.invoke(false, false));
-
-    mh = lookup.findStatic(Main.class, "Xor",
-                           MethodType.methodType(boolean.class, boolean.class, boolean.class));
-    assertEquals(false, (boolean) mh.invokeExact(true, true));
-    assertEquals(true, (boolean) mh.invokeExact(true, false));
-    assertEquals(true, (boolean) mh.invokeExact(false, true));
-    assertEquals(false, (boolean) mh.invokeExact(false, false));
-    assertEquals(false, (boolean) mh.invoke(true, true));
-    assertEquals(true, (boolean) mh.invoke(true, false));
-    assertEquals(true, (boolean) mh.invoke(false, true));
-    assertEquals(false, (boolean) mh.invoke(false, false));
-
-    System.err.println("$opt$ReturnBooleanTest done.");
-  }
-
-  public static void $opt$ReturnCharTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Next",
-                           MethodType.methodType(char.class, char.class));
-    assertEquals('B', (char) mh.invokeExact('A'));
-    assertEquals((char) -55, (char) mh.invokeExact((char) -56));
-    System.err.println("$opt$ReturnCharTest done.");
-  }
-
-  public static void $opt$ReturnByteTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                                         MethodType.methodType(byte.class, byte.class, byte.class));
-    assertEquals((byte) 30, (byte) mh.invokeExact((byte) 10, (byte) 3));
-    assertEquals((byte) -90, (byte) mh.invoke((byte) -10, (byte) 9));
-    System.err.println("$opt$ReturnByteTest done.");
-  }
-
-  public static void $opt$ReturnShortTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(short.class, short.class, short.class));
-    assertEquals((short) 3000, (short) mh.invokeExact((short) 1000, (short) 3));
-    assertEquals((short) -3000, (short) mh.invoke((short) -1000, (short) 3));
-    System.err.println("$opt$ReturnShortTest done.");
-  }
-
-  public static void $opt$ReturnIntTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(int.class, int.class, int.class));
-    assertEquals(3_000_000, (int) mh.invokeExact(1_000_000, 3));
-    assertEquals(-3_000_000, (int) mh.invoke(-1_000, 3_000));
-    System.err.println("$opt$ReturnIntTest done.");
-  }
-
-  public static void $opt$ReturnLongTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(long.class, long.class, long.class));
-    assertEquals(4_294_967_295_000L, (long) mh.invokeExact(1000L, 4_294_967_295L));
-    assertEquals(-4_294_967_295_000L, (long) mh.invoke(-1000L, 4_294_967_295L));
-    System.err.println("$opt$ReturnLongTest done.");
-  }
-
-  public static void $opt$ReturnFloatTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(float.class, float.class, float.class));
-    assertEquals(3.0F, (float) mh.invokeExact(1000.0F, 3e-3F));
-    assertEquals(-3.0F, (float) mh.invoke(-1000.0F, 3e-3F));
-    System.err.println("$opt$ReturnFloatTest done.");
-  }
-
-  public static void $opt$ReturnDoubleTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(double.class, double.class, double.class));
-    assertEquals(3033000.0, (double) mh.invokeExact(1000.0, 3.033e3));
-    assertEquals(-3033000.0, (double) mh.invoke(-1000.0, 3.033e3));
-    System.err.println("$opt$ReturnDoubleTest done.");
-  }
-
-  public static void $opt$ReturnStringTest() throws Throwable {
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-    MethodHandle mh = lookup.findStatic(Main.class, "Multiply",
-                           MethodType.methodType(String.class, String.class, int.class));
-    assertEquals("100010001000", (String) mh.invokeExact("1000", 3));
-    assertEquals("100010001000", (String) mh.invoke("1000", 3));
-    System.err.println("$opt$ReturnStringTest done.");
-  }
-
-  public static void ReturnValuesTest() throws Throwable {
-    $opt$ReturnBooleanTest();
-    $opt$ReturnCharTest();
-    $opt$ReturnByteTest();
-    $opt$ReturnShortTest();
-    $opt$ReturnIntTest();
-    $opt$ReturnLongTest();
-    $opt$ReturnFloatTest();
-    $opt$ReturnDoubleTest();
-    $opt$ReturnStringTest();
-    System.err.println("ReturnValuesTest done.");
-  }
-
-  static class ValueHolder {
-    public boolean m_z;
-    public static boolean s_z;
-  }
-
-  public static void $opt$AccessorsTest() throws Throwable {
-    ValueHolder valueHolder = new ValueHolder();
-    MethodHandles.Lookup lookup = MethodHandles.lookup();
-
-    MethodHandle setMember = lookup.findSetter(ValueHolder.class, "m_z", boolean.class);
-    MethodHandle getMember = lookup.findGetter(ValueHolder.class, "m_z", boolean.class);
-    MethodHandle setStatic = lookup.findStaticSetter(ValueHolder.class, "s_z", boolean.class);
-    MethodHandle getStatic = lookup.findStaticGetter(ValueHolder.class, "s_z", boolean.class);
-
-    boolean [] values = { false, true, false, true, false };
-    for (boolean value : values) {
-      assertEquals((boolean) getStatic.invoke(), ValueHolder.s_z);
-      setStatic.invoke(value);
-      ValueHolder.s_z = value;
-      assertEquals(ValueHolder.s_z, value);
-      assertEquals((boolean) getStatic.invoke(), value);
-
-      assertEquals((boolean) getMember.invoke(valueHolder), valueHolder.m_z);
-      setMember.invoke(valueHolder, value);
-      valueHolder.m_z = value;
-      assertEquals(valueHolder.m_z, value);
-      assertEquals((boolean) getMember.invoke(valueHolder), value);
-    }
-  }
-
-  public static void main(String[] args) throws Throwable {
-    $opt$BasicTest();
-    ReturnValuesTest();
-    $opt$AccessorsTest();
-  }
-}
diff --git a/test/957-methodhandle-transforms/src/Main.java b/test/957-methodhandle-transforms/src/Main.java
index 9e79ff4..5806509 100644
--- a/test/957-methodhandle-transforms/src/Main.java
+++ b/test/957-methodhandle-transforms/src/Main.java
@@ -40,17 +40,17 @@
         IllegalArgumentException.class);
 
     if (handle.type().returnType() != String.class) {
-      fail("Unexpected return type for handle: " + handle +
+      System.out.println("Unexpected return type for handle: " + handle +
           " [ " + handle.type() + "]");
     }
 
     final IllegalArgumentException iae = new IllegalArgumentException("boo!");
     try {
       handle.invoke(iae);
-      fail("Expected an exception of type: java.lang.IllegalArgumentException");
+      System.out.println("Expected an exception of type: java.lang.IllegalArgumentException");
     } catch (IllegalArgumentException expected) {
       if (expected != iae) {
-        fail("Wrong exception: expected " + iae + " but was " + expected);
+        System.out.println("Wrong exception: expected " + iae + " but was " + expected);
       }
     }
   }
@@ -262,7 +262,7 @@
       array[0] = 42;
       int value = (int) getter.invoke(array, 0);
       if (value != 42) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       try {
@@ -284,7 +284,7 @@
       array[0] = 42;
       long value = (long) getter.invoke(array, 0);
       if (value != 42l) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -294,7 +294,7 @@
       array[0] = 42;
       short value = (short) getter.invoke(array, 0);
       if (value != 42l) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -304,7 +304,7 @@
       array[0] = 42;
       char value = (char) getter.invoke(array, 0);
       if (value != 42l) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -314,7 +314,7 @@
       array[0] = (byte) 0x8;
       byte value = (byte) getter.invoke(array, 0);
       if (value != (byte) 0x8) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -324,7 +324,7 @@
       array[0] = true;
       boolean value = (boolean) getter.invoke(array, 0);
       if (!value) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -334,7 +334,7 @@
       array[0] = 42.0f;
       float value = (float) getter.invoke(array, 0);
       if (value != 42.0f) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -344,7 +344,7 @@
       array[0] = 42.0;
       double value = (double) getter.invoke(array, 0);
       if (value != 42.0) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -372,10 +372,10 @@
       setter.invoke(array, 1, 43);
 
       if (array[0] != 42) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
       if (array[1] != 43) {
-        fail("Unexpected value: " + array[1]);
+        System.out.println("Unexpected value: " + array[1]);
       }
 
       try {
@@ -396,7 +396,7 @@
       long[] array = new long[1];
       setter.invoke(array, 0, 42l);
       if (array[0] != 42l) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -405,7 +405,7 @@
       short[] array = new short[1];
       setter.invoke(array, 0, (short) 42);
       if (array[0] != 42l) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -414,7 +414,7 @@
       char[] array = new char[1];
       setter.invoke(array, 0, (char) 42);
       if (array[0] != 42) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -423,7 +423,7 @@
       byte[] array = new byte[1];
       setter.invoke(array, 0, (byte) 0x8);
       if (array[0] != (byte) 0x8) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -432,7 +432,7 @@
       boolean[] array = new boolean[1];
       setter.invoke(array, 0, true);
       if (!array[0]) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -441,7 +441,7 @@
       float[] array = new float[1];
       setter.invoke(array, 0, 42.0f);
       if (array[0] != 42.0f) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -450,7 +450,7 @@
       double[] array = new double[1];
       setter.invoke(array, 0, 42.0);
       if (array[0] != 42.0) {
-        fail("Unexpected value: " + array[0]);
+        System.out.println("Unexpected value: " + array[0]);
       }
     }
 
@@ -471,7 +471,7 @@
       MethodHandle identity = MethodHandles.identity(boolean.class);
       boolean value = (boolean) identity.invoke(false);
       if (value) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -479,7 +479,7 @@
       MethodHandle identity = MethodHandles.identity(byte.class);
       byte value = (byte) identity.invoke((byte) 0x8);
       if (value != (byte) 0x8) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -487,7 +487,7 @@
       MethodHandle identity = MethodHandles.identity(char.class);
       char value = (char) identity.invoke((char) -56);
       if (value != (char) -56) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -495,7 +495,7 @@
       MethodHandle identity = MethodHandles.identity(short.class);
       short value = (short) identity.invoke((short) -59);
       if (value != (short) -59) {
-        fail("Unexpected value: " + Short.toString(value));
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -503,7 +503,7 @@
       MethodHandle identity = MethodHandles.identity(int.class);
       int value = (int) identity.invoke(52);
       if (value != 52) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -511,7 +511,7 @@
       MethodHandle identity = MethodHandles.identity(long.class);
       long value = (long) identity.invoke(-76l);
       if (value != (long) -76) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -519,7 +519,7 @@
       MethodHandle identity = MethodHandles.identity(float.class);
       float value = (float) identity.invoke(56.0f);
       if (value != (float) 56.0f) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -527,7 +527,7 @@
       MethodHandle identity = MethodHandles.identity(double.class);
       double value = (double) identity.invoke((double) 72.0);
       if (value != (double) 72.0) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -544,28 +544,28 @@
       MethodHandle constant = MethodHandles.constant(int.class, 56);
       int value = (int) constant.invoke();
       if (value != 56) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       // short constant values are converted to int.
       constant = MethodHandles.constant(int.class, (short) 52);
       value = (int) constant.invoke();
       if (value != 52) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       // char constant values are converted to int.
       constant = MethodHandles.constant(int.class, (char) 'b');
       value = (int) constant.invoke();
       if (value != (int) 'b') {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       // int constant values are converted to int.
       constant = MethodHandles.constant(int.class, (byte) 0x1);
       value = (int) constant.invoke();
       if (value != 1) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       // boolean, float, double and long primitive constants are not convertible
@@ -600,13 +600,13 @@
       MethodHandle constant = MethodHandles.constant(long.class, 56l);
       long value = (long) constant.invoke();
       if (value != 56l) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
 
       constant = MethodHandles.constant(long.class, (int) 56);
       value = (long) constant.invoke();
       if (value != 56l) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -615,7 +615,7 @@
       MethodHandle constant = MethodHandles.constant(byte.class, (byte) 0x12);
       byte value = (byte) constant.invoke();
       if (value != (byte) 0x12) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -624,7 +624,7 @@
       MethodHandle constant = MethodHandles.constant(boolean.class, true);
       boolean value = (boolean) constant.invoke();
       if (!value) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -633,7 +633,7 @@
       MethodHandle constant = MethodHandles.constant(char.class, 'f');
       char value = (char) constant.invoke();
       if (value != 'f') {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -642,7 +642,7 @@
       MethodHandle constant = MethodHandles.constant(short.class, (short) 123);
       short value = (short) constant.invoke();
       if (value != (short) 123) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -651,7 +651,7 @@
       MethodHandle constant = MethodHandles.constant(float.class, 56.0f);
       float value = (float) constant.invoke();
       if (value != 56.0f) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -660,7 +660,7 @@
       MethodHandle constant = MethodHandles.constant(double.class, 256.0);
       double value = (double) constant.invoke();
       if (value != 256.0) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -678,13 +678,13 @@
 
     char value = (char) stringCharAt.invoke("foo", 0);
     if (value != 'f') {
-      fail("Unexpected value: " + value);
+      System.out.println("Unexpected value: " + value);
     }
 
     MethodHandle bound = stringCharAt.bindTo("foo");
     value = (char) bound.invoke(0);
     if (value != 'f') {
-      fail("Unexpected value: " + value);
+      System.out.println("Unexpected value: " + value);
     }
 
     try {
@@ -706,7 +706,7 @@
     bound = integerParseInt.bindTo("78452");
     int intValue = (int) bound.invoke();
     if (intValue != 78452) {
-      fail("Unexpected value: " + intValue);
+      System.out.println("Unexpected value: " + intValue);
     }
   }
 
@@ -745,11 +745,11 @@
 
       boolean value = (boolean) adapter.invoke((int) 42);
       if (!value) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
       value = (boolean) adapter.invoke((int) 43);
       if (value) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -764,7 +764,7 @@
 
       int value = (int) adapter.invoke("56");
       if (value != 57) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
 
@@ -779,7 +779,7 @@
 
       int value = (int) adapter.invoke();
       if (value != 42) {
-        fail("Unexpected value: " + value);
+        System.out.println("Unexpected value: " + value);
       }
     }
   }
@@ -791,7 +791,7 @@
       return;
     }
 
-    fail("Unexpected arguments: " + a + ", " + b + ", " + c
+    System.out.println("Unexpected arguments: " + a + ", " + b + ", " + c
         + ", " + d + ", " + e + ", " + f + ", " + g + ", " + h);
   }
 
@@ -800,7 +800,7 @@
       return;
     }
 
-    fail("Unexpected arguments: " + a + ", " + b);
+    System.out.println("Unexpected arguments: " + a + ", " + b);
   }
 
   public static void testPermuteArguments() throws Throwable {
@@ -893,11 +893,6 @@
     Thread.dumpStack();
   }
 
-  public static void fail(String message) {
-    System.out.println("fail: " + message);
-    Thread.dumpStack();
-  }
-
   public static void assertEquals(String s1, String s2) {
     if (s1 == s2) {
       return;