-
Bug
-
Resolution: Fixed
-
P3
-
11, 17, 19
-
b26
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8288830 | 17.0.5-oracle | Tobias Hartmann | P3 | Resolved | Fixed | b01 |
JDK-8289453 | 17.0.5 | Goetz Lindenmaier | P3 | Resolved | Fixed | b01 |
This code seems wrong:
uintptr_t data() const { return value() >> data_shift; }
It's doing a signed shift, so the sign bit is going to be extended into the unsigned result, giving a value that is too large.
InJDK-8261235, non_data_bits was changed to work around this problem, but the real problem is the sign bit. non_data_bits should not count pointer_bits because pointer_bits is actually included in kind_bits (see JDK-8287288).
uintptr_t data() const { return value() >> data_shift; }
It's doing a signed shift, so the sign bit is going to be extended into the unsigned result, giving a value that is too large.
In
- backported by
-
JDK-8288830 LIR_Opr::vreg_number() and data() can return negative number
- Resolved
-
JDK-8289453 LIR_Opr::vreg_number() and data() can return negative number
- Resolved
- relates to
-
JDK-8261235 C1 compilation fails with assert(res->vreg_number() == index) failed: conversion check
- Resolved
-
JDK-8287288 Fix some typos in C1
- Resolved
- links to
-
Commit openjdk/jdk17u-dev/201dad41
-
Commit openjdk/jdk/cdb47688
-
Review openjdk/jdk17u-dev/502
-
Review openjdk/jdk/8912
(3 links to)