On Thu, 4 Sep 2025 18:24:57 GMT, Matias Saavedra Silva <matsa...@openjdk.org> wrote:
>> The logic located in `ClassVerifier::ends_in_athrow()` is no longer required >> by the JVM Spec as of Java SE 22 (see JVMS 4.10) and the error cases should >> be handled by the stack map table and its rules for `uninitializedThis`. >> Thanks to that, `ClassVerifier::ends_in_athrow()` and any relevant code can >> be removed. Verified with tier1-5 tests. > > Matias Saavedra Silva has updated the pull request incrementally with one > additional commit since the last revision: > > Fixed copyright Looks reasonable, and ClassFile API changes look good. In JVMS 24 [4.10.1.9.invokespecial](https://docs.oracle.com/javase/specs/jvms/se24/html/jvms-4.html#jvms-4.10.1.9.invokespecial): > In the special case of initializing the current object (that is, when > invoking <init> for type uninitializedThis), the original frame typically > holds an uninitialized object in local variable 0 and has flag > flagThisUninit. Normal termination of invokespecial initializes the > uninitialized object and turns off the flagThisUninit flag. But if the > invokespecial invocation throws an exception, the exception frame contains > the broken object (with type top) and the flagThisUninit flag (the old flag). > There is no way to perform a return instruction given that type state, so the > handler would have to throw another exception (or loop forever). In fact, > it's not even possible to express a handler with that type state, because > there is no way for a stack frame, as expressed by the StackMapTable > attribute > ([ยง4.7.4](https://docs.oracle.com/javase/specs/jvms/se24/html/jvms-4.html#jvms-4.7.4)), > to carry flagThisUninit without any accompanying use of type > uninitializedThis. Justifies this change. ------------- Marked as reviewed by liach (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/27107#pullrequestreview-3187515624