JDK-8039043 : Implicit null check is in the wrong place in C1 -UseCompressedOops
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 8u20,9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2014-04-02
  • Updated: 2014-07-29
  • Resolved: 2014-04-02
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u20Fixed 9 b08Fixed
Description
[4/2/14, 6:29:26 AM] Tom Rodriguez: The implicit null check is in the wrong place.
[4/2/14, 6:29:29 AM] Tom Rodriguez: diff -r f83404938588 -r 1b96d1a74514 src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
--- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Tue Apr 01 15:49:13 2014 -0700
+++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Tue Apr 01 19:45:34 2014 -0700
@@ -800,7 +800,13 @@
        if (UseCompressedOops && !wide) {
          __ movl(as_Address(addr), (int32_t)NULL_WORD);
        } else {
+#ifdef _LP64
+          __ xorptr(r10, r10);
+          null_check_here = code_offset();
+          __ movptr(as_Address(addr), r10);
+#else
          __ movptr(as_Address(addr), NULL_WORD);
+#endif
        }
      } else {
        if (is_literal_address(addr)) {