Hi,

Reflective construction of value object triggers assert in C2 because it does 
not follow the normal object construction pattern and is technically UB because 
we try to return a larval object from a method. I was told that this is 
required for the construction of hidden classes, but to me it seems like we put 
those restrictions on ourselves and shoot ourselves in the foot by using these 
`Unsafe` hacks.

This PR tries to fix this issue by letting the compiler know of these methods 
which can return or accept larval objects. Note that this is pretty fragile, 
and seemingly harmless changes to the code shape generated by the 
`MethodHandle` mechanism can break it, which is a usual symptom of undefined 
behaviour.

Please take a look and leave your review, thanks a lot.

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

Commit messages:
 - useless import
 - Value construction with reflection

Changes: https://git.openjdk.org/valhalla/pull/2204/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2204&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8378560
  Stats: 97 lines in 10 files changed: 72 ins; 12 del; 13 mod
  Patch: https://git.openjdk.org/valhalla/pull/2204.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2204/head:pull/2204

PR: https://git.openjdk.org/valhalla/pull/2204

Reply via email to