Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8130847

Cloned object's fields observed as null after C2 escape analysis

XMLWordPrintable

    • b66
    • b81
    • x86
    • generic
    • Verified

        Testing observed a NPE in java.time.ZoneId.systemDefault() after C2 compilation.

        import java.io.IOException;
        import java.time.ZoneId;
        import java.util.TimeZone;

        public class CloneBug {

            static final TimeZone UTC = TimeZone.getTimeZone("UTC");

            static void test() {
                TimeZone.setDefault(UTC);
                for (int i = 0; i < 16801; i++) {
                    ZoneId.systemDefault();
                }
            }

            public static void main(String[] args) throws IOException {
                for (int i = 0; i < 100; i++) {
                    test();
                }
            }
        }

        Expected output: Nothing
        Actual output:
        Exception in thread "main" java.lang.NullPointerException
        at java.util.TimeZone.toZoneId0(TimeZone.java:560)
        at java.util.TimeZone.toZoneId(TimeZone.java:550)
        at java.time.ZoneId.systemDefault(ZoneId.java:274)
        at CloneBug.test(CloneBug.java:13)
        at CloneBug.main(CloneBug.java:19)

        Supplying any of the following avoids the issue:
        -Xint
        -XX:-DoEscapeAnalysis
        -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_clone
        -XX:TieredStopAtLevel=1

        Issue still reproduce using:
        -XX:-TieredCompilation

        Issue narrowed down to 9-b66, still exists in 9-b71

        ILW = Unavoidable exceptions in compiled code (H), heavy use of publicly available method used internally in the JDK will trigger (H), disabling escape analysis avoids issue entirely (L) = HHL = P2

              roland Roland Westrelin
              redestad Claes Redestad
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: