Integrated: 8272563: assert(is_double_stack() && !is_virtual()) failed: type check
Fairoz Matte
fmatte at openjdk.java.net
Wed Sep 1 10:15:52 UTC 2021
On Wed, 18 Aug 2021 12:37:00 GMT, Fairoz Matte <fmatte at openjdk.org> wrote:
> This patch is proposed by the submitter of the bug - ugawa at ci.i.u-tokyo.ac.jp
>
> The method CardTableBarrierSetC1::post_barrier generates a move LIR when TwoOperandLIRForm flag is true to move the address to be marked in the card table to a temporary register.
>> __ move(addr, tmp);
> However, this code only guarantees that `addr` is a valid register for LIR, which can be a virtual register. If the virtual register for `addr` is spilled to the stack by chance, the `move(addr, tmp)` is compiled to a memory-to-register which causes an assertion failure because a memory-to-register move requires their arguments to have the same size.
> The fix is to check if it is is_oop() and call the mov appropriately.
>
> No issues found in local testing and Mach5 tier1-3
This pull request has now been integrated.
Changeset: a58cf165
Author: Fairoz Matte <fmatte at openjdk.org>
Committer: Tobias Hartmann <thartmann at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/a58cf16509f3120d69fc18bd4c2c49e9ad590f73
Stats: 2 lines in 1 file changed: 1 ins; 0 del; 1 mod
8272563: assert(is_double_stack() && !is_virtual()) failed: type check
Reviewed-by: thartmann, iveresov
-------------
PR: https://git.openjdk.java.net/jdk/pull/5164
More information about the hotspot-gc-dev
mailing list