Hi, This is part 1 of a two part upstreaming process of the patch mentioned in the subject line. The patch was split into 2 in order to document 2 separate specification changes that arose from a change in the implementation, with 2 separate CSRs.
This patch changes the handling of method handles that might throw checked exceptions, by the var handle combinators found in `jdk.incubator.foreign.MemoryHandles`. Particularly, it makes the check more lenient towards `BoundMethodHandle`s that have fields that are method handles that might themselves throw exceptions, since it is not known whether the enclosing method handle catches such exceptions. For instance, if a target method handle is wrapped using the `catchException` combinator, which handles all exceptions thrown by that target, the current code will still reject such method handles, even though no checked exceptions can be thrown. The patch fixes this by instead wrapping method handles for which it is not possible to eagerly determine whether they throw exception using the `catchException` combinator, with an exception handler that catches checked exceptions and instead throws an `IllegalStateException` with the original exception as the cause. (See also the CSR). The main motivation for doing this is having the ability to share the implementation with the `CLinker::upcallStub` API, which also wants to eagerly reject method handles that are determined to throw exceptions. Thanks, Jorn Testing: `jdk_foreign` test suite. ------------- Commit messages: - Pt1 Changes: https://git.openjdk.java.net/jdk/pull/4395/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4395&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8268328 Stats: 100 lines in 4 files changed: 49 ins; 18 del; 33 mod Patch: https://git.openjdk.java.net/jdk/pull/4395.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/4395/head:pull/4395 PR: https://git.openjdk.java.net/jdk/pull/4395
