test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalCloneAbstr.jasm
author hseigel
Fri, 15 Dec 2017 11:23:50 -0500
changeset 48463 474cec233fb2
child 53853 7ca9e625d6b2
permissions -rw-r--r--
8154587: Resolution fails for default method named 'clone' Summary: Make sure default methods with the same names as those in j.l.Object get put in the default methods table where resolution can find them. Reviewed-by: acorn, lfoltan
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48463
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     1
/*
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     4
 *
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     7
 * published by the Free Software Foundation.
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     8
 *
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    13
 * accompanied this code).
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    14
 *
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    18
 *
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    21
 * questions.
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    22
 *
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    23
 */
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    24
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    25
/*
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    26
 * @test
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    27
 * @bug 8154587
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    28
 * @summary Check that invokevirtual of clone() calls java.lang.Object.clone()
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    29
 *          even if a superinterface has an abstract method named clone().
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    30
 * @compile DefMethClone.jasm SuperClass.jasm I1Abstr.java NoLocalCloneAbstr.jasm
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    31
 * @run main/othervm -noverify NoLocalCloneAbstr
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    32
 */
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    33
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    34
// The below .jasm code implements the following java code:
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    35
//
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    36
// public class NoLocalCloneAbstr extends SuperClass implements Cloneable,I1Abstr {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    37
//
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    38
//     static Object test(SuperClass a) { return a.clone(); }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    39
//
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    40
//     public static void main(String[] args) {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    41
//         Object obj = test(new NoLocalCloneAbstr());
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    42
//         if (!(obj instanceof NoLocalCloneAbstr)) {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    43
//             throw new RuntimeException("Wrong clone() called.");
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    44
//         }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    45
//     }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    46
// }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    47
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    48
super public class NoLocalCloneAbstr extends SuperClass implements java/lang/Cloneable, I1Abstr version 54:0 {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    49
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    50
    public Method "<init>":"()V" stack 1 locals 1 {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    51
        aload_0;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    52
        invokespecial    Method SuperClass."<init>":"()V";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    53
        return;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    54
    }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    55
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    56
    static Method test:"(LSuperClass;)Ljava/lang/Object;" stack 1 locals 1 {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    57
        aload_0;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    58
        invokevirtual    Method SuperClass.clone:"()Ljava/lang/Object;";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    59
        areturn;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    60
    }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    61
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    62
    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    63
        new    class NoLocalCloneAbstr;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    64
        dup;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    65
        invokespecial Method "<init>":"()V";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    66
        invokestatic Method test:"(LSuperClass;)Ljava/lang/Object;";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    67
        astore_1;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    68
        aload_1;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    69
        instanceof  class NoLocalCloneAbstr;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    70
        ifne    L31;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    71
        new    class java/lang/RuntimeException;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    72
        dup;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    73
        ldc    String "Wrong clone() called.";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    74
        invokespecial Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    75
        athrow;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    76
      L31:    stack_frame_type append;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    77
        locals_map class java/lang/Object;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    78
        return;
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    79
    }
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    80
474cec233fb2 8154587: Resolution fails for default method named 'clone'
hseigel
parents:
diff changeset
    81
} // end Class NoLocalCloneAbstr