[lworld] RFR: 8366717: [lworld] Cleanup defensive fixing of JDK-8365996 [v2]

Marc Chevalier mchevalier at openjdk.org
Fri Dec 19 09:06:11 UTC 2025


On Fri, 19 Dec 2025 08:56:27 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:

>> I don't understand why it's not a problem on mainline, tho. And I agree it's weird. I've looked, but it's hard to investigate why something works rather than not (on a somewhat diverging codebase). I spent some time on that, but eventually decided it's not that critical, as long as we have a way to make it work for Valhalla too.
>
> I was suggesting that we should do what mainline does if `!InlineTypePassFieldsAsArgs`, would that make sense?
> 
> I.e. do `store_check(masm, dst.base(), dst);`

That is the else-branch, right? Right now we have

if (tmp3 != noreg) {
  __ mov(tmp3, dst.base());
  store_check(masm, tmp3, dst);
} else {
  // It's OK to corrupt the dst.base() register.
  store_check(masm, dst.base(), dst);
}

If I understand well, you're suggesting to write

if (InlineTypePassFieldsAsArgs) {
  if (tmp3 != noreg) {
    __ mov(tmp3, dst.base());
    store_check(masm, tmp3, dst);
  } else {
    // It's OK to corrupt the dst.base() register.
    store_check(masm, dst.base(), dst);
  }
} else {
  // as mainline
  store_check(masm, dst.base(), dst);
}

but to me, it looks equivalent to


if (InlineTypePassFieldsAsArgs && tmp3 != noreg) {
  __ mov(tmp3, dst.base());
  store_check(masm, tmp3, dst);
} else {
  // It's OK to corrupt the dst.base() register.
  store_check(masm, dst.base(), dst);
}

since both else-branch are identical.

And this, I experimentally found that it's failing quite a lot, with backtraces as I mentioned. Is there an obvious mistake in my logic I'm missing?

-------------

PR Review Comment: https://git.openjdk.org/valhalla/pull/1824#discussion_r2634271672


More information about the valhalla-dev mailing list