test/hotspot/jtreg/runtime/exceptionMsgs/IncompatibleClassChangeError/IncompatibleClassChangeErrorTest.java
author goetz
Fri, 15 Jun 2018 12:31:28 +0200
changeset 50633 b8055b38b252
parent 49469 1708db7f94c6
child 50761 cb07f4b539fc
permissions -rw-r--r--
8204268: Improve some IncompatibleClassChangeError messages. Reviewed-by: stuefe, hseigel
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     1
/*
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     3
 * Copyright (c) 2018 SAP SE. All rights reserved.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     5
 *
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     8
 * published by the Free Software Foundation.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
     9
 *
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    14
 * accompanied this code).
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    15
 *
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    19
 *
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    22
 * questions.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    23
 */
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    24
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    25
/**
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    26
 * @test
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    27
 * @summary Check that the verbose message of ICCE is printed correctly.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    28
 *          The test forces errors in vtable stubs and interpreter.
49399
e0fec3292f00 8199532: [TESTBUG] AbstractMethodErrorTest.java test failed with -Xcomp
goetz
parents: 49368
diff changeset
    29
 * @requires !(os.arch=="arm") & vm.flavor == "server" & !vm.emulatedClient & vm.compMode=="Xmixed" & (!vm.graal.enabled | vm.opt.TieredCompilation == true) & (vm.opt.TieredStopAtLevel == null | vm.opt.TieredStopAtLevel==4)
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    30
 * @library /test/lib /
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    31
 * @build sun.hotspot.WhiteBox
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    32
 * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    33
 * @compile IncompatibleClassChangeErrorTest.java
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    34
 * @compile ImplementsSomeInterfaces.jasm ICC2_B.jasm ICC3_B.jasm ICC4_B.jasm
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    35
 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
49399
e0fec3292f00 8199532: [TESTBUG] AbstractMethodErrorTest.java test failed with -Xcomp
goetz
parents: 49368
diff changeset
    36
 *                   -XX:CompileThreshold=1000 -XX:-BackgroundCompilation -XX:-Inline
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    37
 *                   -XX:CompileCommand=exclude,test.IncompatibleClassChangeErrorTest::test_iccInt
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    38
 *                   test.IncompatibleClassChangeErrorTest
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    39
 */
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    40
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    41
package test;
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    42
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    43
import sun.hotspot.WhiteBox;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    44
import compiler.whitebox.CompilerWhiteBoxTest;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    45
import java.lang.reflect.Method;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    46
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    47
// This test assembles an erroneous installation of classes.
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    48
// First, compile the test by @compile. This results in a legal set
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    49
// of classes.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    50
// Then, with jasm, generate incompatible classes that overwrite
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    51
// the class files in the build directory.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    52
// Last, call the real tests throwing IncompatibleClassChangeErrors
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    53
// and check the messages generated.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    54
public class IncompatibleClassChangeErrorTest {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    55
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    56
    private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    57
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    58
    private static boolean enableChecks = true;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    59
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    60
    private static String expectedErrorMessageInterpreted =
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    61
        "Class test.ImplementsSomeInterfaces " +
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    62
        "does not implement the requested interface test.InterfaceICCE1";
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    63
    private static String expectedErrorMessageCompiled =
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    64
        "Class test.ICC2_B does not implement the requested interface test.ICC2_iB";
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    65
        // old message: "vtable stub"
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    66
49469
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    67
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    68
    private static boolean compile(Class<?> clazz, String name) {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    69
        try {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    70
            Method method = clazz.getMethod(name);
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    71
            boolean enqueued = WHITE_BOX.enqueueMethodForCompilation(method, CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION);
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    72
            if (!enqueued) {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    73
                System.out.println("Warning: Blocking compilation failed for " + clazz.getName() + "." + name + " (timeout?)");
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    74
                return false;
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    75
            } else if (!WHITE_BOX.isMethodCompiled(method)) {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    76
                throw new RuntimeException(clazz.getName() + "." + name + " is not compiled");
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    77
            }
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    78
        } catch (NoSuchMethodException e) {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    79
            throw new RuntimeException(clazz.getName() + "." + name + " not found", e);
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    80
        }
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    81
        return true;
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    82
    }
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    83
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    84
    public static boolean setup_test() {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    85
        // Assure all exceptions are loaded.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    86
        new AbstractMethodError();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    87
        new IncompatibleClassChangeError();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    88
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    89
        enableChecks = false;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    90
        // Warmup
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    91
        System.out.println("warmup:");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    92
        test_iccInt();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    93
        test_icc_compiled_itable_stub();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    94
        enableChecks = true;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    95
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
    96
        // Compile
49469
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
    97
        if (!compile(IncompatibleClassChangeErrorTest.class, "test_icc_compiled_itable_stub") ||
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    98
            !compile(ICC2_C.class, "b") ||
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
    99
            !compile(ICC2_D.class, "b") ||
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   100
            !compile(ICC2_E.class, "b")) {
49469
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   101
          return false;
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   102
        }
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   103
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   104
        System.out.println("warmup done.");
49469
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   105
        return true;
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   106
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   107
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   108
    // Should never be compiled.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   109
    public static void test_iccInt() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   110
        boolean caught_icc = false;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   111
        try {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   112
            InterfaceICCE1 objectInterface = new ImplementsSomeInterfaces();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   113
            // IncompatibleClassChangeError gets thrown in
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   114
            // - TemplateTable::invokeinterface()
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   115
            // - LinkResolver::runtime_resolve_interface_method()
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   116
            objectInterface.aFunctionOfMyInterface();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   117
        } catch (IncompatibleClassChangeError e) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   118
            String errorMsg = e.getMessage();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   119
            if (enableChecks && !errorMsg.equals(expectedErrorMessageInterpreted)) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   120
                System.out.println("Expected: " + expectedErrorMessageInterpreted + "\n" +
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   121
                                   "but got:  " + errorMsg);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   122
                throw new RuntimeException("Wrong error message of IncompatibleClassChangeError.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   123
            }
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   124
            if (enableChecks) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   125
                System.out.println("Test 1 passed with message: " + errorMsg);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   126
            }
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   127
            caught_icc = true;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   128
        } catch (Throwable e) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   129
            throw new RuntimeException("Caught unexpected exception: " + e);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   130
        }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   131
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   132
        // Check we got the exception.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   133
        if (!caught_icc) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   134
            throw new RuntimeException("Expected IncompatibleClassChangeError was not thrown.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   135
        }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   136
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   137
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   138
    // -------------------------------------------------------------------------
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   139
    // Test AbstractMethodErrors detected in itable stubs.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   140
    // Note: How can we verify that we really stepped through the vtable stub?
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   141
    // - Bimorphic inlining should not happen since we have no profiling data when
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   142
    //   we compile the method
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   143
    // - As a result, an inline cache call should be generated
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   144
    // - This inline cache call is patched into a real vtable call at the first
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   145
    //   re-resolve, which happens constantly during the first 10 iterations of the loop.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   146
    // => we should be fine! :-)
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   147
    public static void test_icc_compiled_itable_stub() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   148
        // Allocated the objects we need and call a valid method.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   149
        boolean caught_icc = false;
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   150
        ICC2_B b = new ICC2_B();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   151
        ICC2_C c = new ICC2_C();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   152
        ICC2_D d = new ICC2_D();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   153
        ICC2_E e = new ICC2_E();
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   154
        b.a();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   155
        c.a();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   156
        d.a();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   157
        e.a();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   158
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   159
        try {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   160
            final int iterations = 10;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   161
            // Test: calls b.b() in the last iteration.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   162
            for (int i = 0; i < iterations; i++) {
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   163
                ICC2_iB a = b;
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   164
                if (i % 3 == 0 && i < iterations - 1) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   165
                    a = c;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   166
                }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   167
                if (i % 3 == 1 && i < iterations - 1) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   168
                    a = d;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   169
                }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   170
                if (i % 3 == 2 && i < iterations - 1) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   171
                    a = e;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   172
                }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   173
                a.b();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   174
            }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   175
        } catch (AbstractMethodError exc) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   176
            // It's a subclass of IncompatibleClassChangeError, so we must catch this first.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   177
            System.out.println();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   178
            System.out.println(exc);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   179
            if (enableChecks) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   180
                String errorMsg = exc.getMessage();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   181
                if (errorMsg == null) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   182
                    throw new RuntimeException("Caught unexpected AbstractMethodError with empty message.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   183
                }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   184
                throw new RuntimeException("Caught unexpected AbstractMethodError.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   185
            }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   186
        } catch (IncompatibleClassChangeError exc) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   187
            caught_icc = true;
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   188
            System.out.println();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   189
            String errorMsg = exc.getMessage();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   190
            if (enableChecks && errorMsg == null) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   191
                System.out.println(exc);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   192
                throw new RuntimeException("Empty error message of IncompatibleClassChangeError.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   193
            }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   194
            if (enableChecks &&
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   195
                !errorMsg.equals(expectedErrorMessageCompiled)) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   196
                System.out.println("Expected: " + expectedErrorMessageCompiled + "\n" +
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   197
                                   "but got:  " + errorMsg);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   198
                System.out.println(exc);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   199
                throw new RuntimeException("Wrong error message of IncompatibleClassChangeError.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   200
            }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   201
            if (enableChecks) {
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   202
                System.out.println("Test 2 passed with message: " + errorMsg);
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   203
            }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   204
        } catch (Throwable exc) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   205
            throw exc; // new RuntimeException("Caught unexpected exception: " + exc);
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   206
        }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   207
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   208
        // Check we got the exception at some point.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   209
        if (enableChecks && !caught_icc) {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   210
            throw new RuntimeException("Expected IncompatibleClassChangeError was not thrown.");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   211
        }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   212
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   213
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   214
    private static String expectedErrorMessage3 =
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   215
        "Class test.ICC3_B can not implement test.ICC3_A, because it is not an interface";
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   216
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   217
    public static void test3_implementsClass() throws Exception {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   218
        try {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   219
            new ICC3_B();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   220
            throw new RuntimeException("Expected IncompatibleClassChangeError was not thrown.");
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   221
        } catch (IncompatibleClassChangeError e) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   222
            String errorMsg = e.getMessage();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   223
            if (!errorMsg.equals(expectedErrorMessage3)) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   224
                System.out.println("Expected: " + expectedErrorMessage3 + "\n" +
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   225
                                   "but got:  " + errorMsg);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   226
                throw new RuntimeException("Wrong error message of IncompatibleClassChangeError.");
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   227
            }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   228
            System.out.println("Test 3 passed with message: " + errorMsg);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   229
        } catch (Throwable e) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   230
            throw new RuntimeException("Caught unexpected exception: " + e);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   231
        }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   232
    }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   233
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   234
    private static String expectedErrorMessage4 =
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   235
        "class test.ICC4_B has interface test.ICC4_iA as super class";
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   236
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   237
    public static void test4_extendsInterface() throws Exception {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   238
        try {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   239
            new ICC4_B();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   240
            throw new RuntimeException("Expected IncompatibleClassChangeError was not thrown.");
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   241
        } catch (IncompatibleClassChangeError e) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   242
            String errorMsg = e.getMessage();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   243
            if (!errorMsg.equals(expectedErrorMessage4)) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   244
                System.out.println("Expected: " + expectedErrorMessage4 + "\n" +
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   245
                                   "but got:  " + errorMsg);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   246
                throw new RuntimeException("Wrong error message of IncompatibleClassChangeError.");
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   247
            }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   248
            System.out.println("Test 4 passed with message: " + errorMsg);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   249
        } catch (Throwable e) {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   250
            throw new RuntimeException("Caught unexpected exception: " + e);
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   251
        }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   252
    }
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   253
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   254
    public static void main(String[] args) throws Exception {
49469
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   255
        if (!setup_test()) {
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   256
            return;
1708db7f94c6 8199624: [Graal] Blocking jvmci compilations time out
thartmann
parents: 49399
diff changeset
   257
        }
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   258
        test_iccInt();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   259
        test_icc_compiled_itable_stub();
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   260
        test3_implementsClass();
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   261
        test4_extendsInterface();
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   262
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   263
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   264
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   265
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   266
// Helper classes to test incompatible class change in interpreter.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   267
//
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   268
// The test also contains .jasm files with implementations
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   269
// of the classes that shall generate the errors.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   270
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   271
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   272
//   I0         // interface defining aFunctionOfMyInterface()
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   273
//   |
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   274
//   |    I1    // interface
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   275
//   |     |
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   276
//   A0    |    // abstract class
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   277
//    \   /
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   278
//      C       // class not implementing I1 and
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   279
//                       not implementing I0::aFunctionOfMyInterface()
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   280
//
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   281
// Test is expected to throw error because of missing interface and not
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   282
// because of missing method.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   283
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   284
interface InterfaceICCE0 {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   285
    public String firstFunctionOfMyInterface0();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   286
    public String secondFunctionOfMyInterface0();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   287
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   288
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   289
interface InterfaceICCE1 {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   290
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   291
    public String firstFunctionOfMyInterface();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   292
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   293
    public String secondFunctionOfMyInterface();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   294
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   295
    public String aFunctionOfMyInterface();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   296
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   297
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   298
abstract class AbstractICCE0 implements InterfaceICCE0 {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   299
    abstract public String firstAbstractMethod();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   300
    abstract public String secondAbstractMethod();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   301
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   302
    abstract public String anAbstractMethod();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   303
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   304
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   305
class ImplementsSomeInterfaces extends
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   306
        AbstractICCE0
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   307
    // This interface is missing in the .jasm implementation.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   308
    implements InterfaceICCE1
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   309
{
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   310
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   311
    public String firstAbstractMethod() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   312
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   313
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   314
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   315
    public String secondAbstractMethod() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   316
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   317
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   318
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   319
    // This method is missing in the .jasm implementation.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   320
    public String anAbstractMethod() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   321
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   322
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   323
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   324
    public String firstFunctionOfMyInterface0() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   325
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   326
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   327
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   328
    public String secondFunctionOfMyInterface0() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   329
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   330
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   331
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   332
    public String firstFunctionOfMyInterface() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   333
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   334
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   335
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   336
    public String secondFunctionOfMyInterface() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   337
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   338
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   339
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   340
    // This method is missing in the .jasm implementation.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   341
    public String aFunctionOfMyInterface() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   342
        return this.getClass().getName();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   343
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   344
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   345
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   346
// Helper classes to test incompatible class change in itable stub.
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   347
//
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   348
// Class hierachy:
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   349
//
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   350
//          iA,iB   (interfaces)
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   351
//          /|\ \
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   352
//         C D E \
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   353
//                B (bad class, missing interface implementation)
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   354
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   355
interface ICC2_iA {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   356
    public void a();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   357
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   358
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   359
interface ICC2_iB {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   360
    public void b();
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   361
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   362
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   363
// This is the erroneous class. A variant of it not
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   364
// implementing ICC2_iB is copied into the test before
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   365
// it is run.
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   366
class ICC2_B implements ICC2_iA,
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   367
                       // This interface is missing in the .jasm implementation.
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   368
                       ICC2_iB {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   369
    public void a() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   370
        System.out.print("B.a() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   371
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   372
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   373
    public void b() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   374
        System.out.print("B.b() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   375
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   376
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   377
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   378
class ICC2_C implements ICC2_iA, ICC2_iB {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   379
    public void a() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   380
        System.out.print("C.a() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   381
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   382
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   383
    public void b() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   384
        System.out.print("C.b() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   385
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   386
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   387
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   388
class ICC2_D implements ICC2_iA, ICC2_iB {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   389
    public void a() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   390
        System.out.print("D.a() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   391
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   392
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   393
    public void b() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   394
        System.out.print("D.b() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   395
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   396
}
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   397
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   398
class ICC2_E implements ICC2_iA, ICC2_iB {
49368
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   399
    public void a() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   400
        System.out.print("E.a() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   401
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   402
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   403
    public void b() {
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   404
        System.out.print("E.b() ");
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   405
    }
2ed1c37df3a5 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
goetz
parents:
diff changeset
   406
}
50633
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   407
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   408
// Helper classes to test error where class appears in implements statement.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   409
//
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   410
// Class hierachy:
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   411
//
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   412
//       A  Some Class.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   413
//       |
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   414
//       B  erroneous class. Correct B extends A, incorrect B (from jasm) implements A.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   415
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   416
class ICC3_A {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   417
}
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   418
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   419
class ICC3_B extends ICC3_A {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   420
}
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   421
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   422
// Helper classes to test error where interface appears in extends statement.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   423
//
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   424
// Class hierachy:
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   425
//
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   426
//       A  Some Interface.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   427
//       |
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   428
//       B  erroneous class. Correct B implements A, incorrect B (from jasm) extends A.
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   429
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   430
interface ICC4_iA {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   431
}
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   432
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   433
class ICC4_B implements ICC4_iA {
b8055b38b252 8204268: Improve some IncompatibleClassChangeError messages.
goetz
parents: 49469
diff changeset
   434
}