RFR: 8373046: Method::get_c2i_unverified_entry() and get_c2i_no_clinit_check_entry() are missing check for abstract method
Ashutosh Mehra
asmehra at openjdk.org
Wed Dec 3 22:07:11 UTC 2025
On Wed, 3 Dec 2025 20:05:02 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
>> This PR fixes a bug introduced by [JDK-8365501](https://bugs.openjdk.org/browse/JDK-8365501). It restores the behavior of `Method::get_c2i_unverified_entry` or `Method::get_c2i_no_clinit_check_entry` for abstract methods as it was before JDK-8365501. It was never the intention of JDK-8365501 to change the behavior.
>> I am not sure if there is any possible code flow that can result in calling `Method::get_c2i_unverified_entry` or `Method::get_c2i_no_clinit_check_entry` for abstract methods, but I think it is safe to keep the behavior of these functions as before.
>
> src/hotspot/share/oops/method.cpp line 180:
>
>> 178: address Method::get_c2i_no_clinit_check_entry() {
>> 179: if (is_abstract()) {
>> 180: return nullptr;
>
> Why it is `nullptr` instead of `SharedRuntime::get_handle_wrong_method_abstract_stub()`. Add comment.
This is not a new behavior. It was `nullptr` before JDK-8365501:
_abstract_method_handler->set_entry_points(SharedRuntime::throw_AbstractMethodError_entry(),
wrong_method_abstract,
wrong_method_abstract,
nullptr);
I am not sure why it was null and not `wrong_method_abstract`.
Change that sets `_c2i_no_clinit_check_entry` to null was introduced in https://github.com/openjdk/jdk/commit/242bd67c6c3bb314302502aae19e092e0820290c
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28645#discussion_r2586760646
More information about the hotspot-dev
mailing list