RFR: 8282218: C1: Missing side effects of dynamic class loading during constant linkage
Vladimir Kozlov
kvn at openjdk.java.net
Thu Feb 24 19:56:04 UTC 2022
On Thu, 24 Feb 2022 13:51:18 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> (The problem is similar to JDK-8282194, but with class loading this time.)
>
> C1 handles unresolved constants by performing constant resolution at runtime and then putting the constant value into the generated code by patching it. But it treats the not-yet-resolved value as a pure constant without any side effects.
>
> It's not the case for constants which trigger class loading using custom class loaders. (All non-String constants do that.)
>
> There are no guarantees that there are no side effects during class loading, so C1 has to be conservative.
>
> Proposed fix kills memory after accessing not-yet-loaded constant in the context of any non-trusted class loader.
>
> Testing: hs-tier1 - hs-tier4
src/hotspot/share/ci/ciStreams.hpp line 258:
> 256:
> 257: int index = get_constant_pool_index();
> 258: constantTag tag = get_raw_pool_tag(index);
Looks like these lines are the same as in `is_dynamic_constant()`. Can you move them in separate method to avoid duplication?
-------------
PR: https://git.openjdk.java.net/jdk/pull/7612
More information about the hotspot-compiler-dev
mailing list