| // Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package jdk8272564; |
| |
| public class Main { |
| // From javac in JDK-18 all of the following three invokes of toString are compiled to |
| // invokeinterface. Prior to JDK 18 the last two where compiled to invokevirtual. |
| // See https://bugs.openjdk.java.net/browse/JDK-8272564. |
| static void f(I i, J j, K k) { |
| i.toString(); |
| j.toString(); |
| k.toString(); |
| } |
| |
| // Remaining public methods on Object. |
| static void g(I i, J j, K k) throws InterruptedException { |
| i.hashCode(); |
| j.hashCode(); |
| k.hashCode(); |
| i.equals(new Object()); |
| j.equals(new Object()); |
| k.equals(new Object()); |
| i.getClass(); |
| j.getClass(); |
| k.getClass(); |
| i.notify(); |
| j.notify(); |
| k.notify(); |
| i.notifyAll(); |
| j.notifyAll(); |
| k.notifyAll(); |
| i.wait(); |
| j.wait(); |
| k.wait(); |
| i.wait(1L); |
| j.wait(1L); |
| k.wait(1L); |
| i.wait(1L, 1); |
| j.wait(1L, 1); |
| k.wait(1L, 1); |
| } |
| |
| public static void main(String[] args) { |
| f(new A(), new B(), new C()); |
| } |
| } |