changeset 59954:d1a9e4218c78

Merge
author jwilhelm
date Fri, 26 Jun 2020 04:15:33 +0200
parents 97726b05c864 69bc9754be7e
children 0948b915c229
files
diffstat 14 files changed, 126 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Fri Jun 26 04:15:33 2020 +0200
@@ -1067,10 +1067,23 @@
     }
 
     private Annotation createAnnotation(List<CPInfo> constantPool, AnnotationDescription desc) {
+        String annotationType = desc.annotationType;
+
+        if (PREVIEW_FEATURE_ANNOTATION.equals(annotationType)) {
+            //the non-public PreviewFeature annotation will not be available in ct.sym,
+            //replace with purely synthetic javac-internal annotation:
+            annotationType = PREVIEW_FEATURE_ANNOTATION_INTERNAL;
+        }
+
         return new Annotation(null,
-                              addString(constantPool, desc.annotationType),
+                              addString(constantPool, annotationType),
                               createElementPairs(constantPool, desc.values));
     }
+    //where:
+        private static final String PREVIEW_FEATURE_ANNOTATION =
+                "Ljdk/internal/PreviewFeature;";
+        private static final String PREVIEW_FEATURE_ANNOTATION_INTERNAL =
+                "Ljdk/internal/PreviewFeature+Annotation;";
 
     private element_value_pair[] createElementPairs(List<CPInfo> constantPool, Map<String, Object> annotationAttributes) {
         element_value_pair[] pairs = new element_value_pair[annotationAttributes.size()];
--- a/src/hotspot/share/code/compiledIC.cpp	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/hotspot/share/code/compiledIC.cpp	Fri Jun 26 04:15:33 2020 +0200
@@ -756,7 +756,9 @@
          "a) MT-unsafe modification of inline cache");
 
   address destination = jump->jump_destination();
-  assert(destination == (address)-1 || destination == entry,
+  assert(destination == (address)-1 || destination == entry
+         || old_method == NULL || !old_method->method_holder()->is_loader_alive() // may have a race due to class unloading.
+         || old_method->is_old(),  // may be race patching deoptimized nmethod due to redefinition.
          "b) MT-unsafe modification of inline cache");
 }
 #endif // !PRODUCT
--- a/src/java.base/share/classes/java/io/ObjectInputStream.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/java.base/share/classes/java/io/ObjectInputStream.java	Fri Jun 26 04:15:33 2020 +0200
@@ -2139,11 +2139,6 @@
         return result;
     }
 
-    @SuppressWarnings("preview")
-    private static boolean isRecord(Class<?> cls) {
-        return cls.isRecord();
-    }
-
     /**
      * Reads and returns "ordinary" (i.e., not a String, Class,
      * ObjectStreamClass, array, or enum constant) object, or null if object's
@@ -2182,7 +2177,7 @@
             handles.markException(passHandle, resolveEx);
         }
 
-        final boolean isRecord = cl != null && isRecord(cl);
+        final boolean isRecord = desc.isRecord();
         if (isRecord) {
             assert obj == null;
             obj = readRecord(desc);
--- a/src/java.base/share/classes/java/io/ObjectStreamClass.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/java.base/share/classes/java/io/ObjectStreamClass.java	Fri Jun 26 04:15:33 2020 +0200
@@ -747,13 +747,6 @@
         }
 
         this.cl = cl;
-        if (cl != null) {
-            this.isRecord = isRecord(cl);
-            // canonical record constructor is shared
-            this.canonicalCtr = osc.canonicalCtr;
-            // cache of deserialization constructors is shared
-            this.deserializationCtrs = osc.deserializationCtrs;
-        }
         this.resolveEx = resolveEx;
         this.superDesc = superDesc;
         name = model.name;
@@ -770,6 +763,11 @@
 
         if (osc != null) {
             localDesc = osc;
+            isRecord = localDesc.isRecord;
+            // canonical record constructor is shared
+            canonicalCtr = localDesc.canonicalCtr;
+            // cache of deserialization constructors is shared
+            deserializationCtrs = localDesc.deserializationCtrs;
             writeObjectMethod = localDesc.writeObjectMethod;
             readObjectMethod = localDesc.readObjectMethod;
             readObjectNoDataMethod = localDesc.readObjectNoDataMethod;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java	Fri Jun 26 04:15:33 2020 +0200
@@ -217,6 +217,7 @@
     public final Type elementTypeType;
     public final Type functionalInterfaceType;
     public final Type previewFeatureType;
+    public final Type previewFeatureInternalType;
     public final Type typeDescriptorType;
     public final Type recordType;
 
@@ -580,6 +581,7 @@
         stringConcatFactory = enterClass("java.lang.invoke.StringConcatFactory");
         functionalInterfaceType = enterClass("java.lang.FunctionalInterface");
         previewFeatureType = enterClass("jdk.internal.PreviewFeature");
+        previewFeatureInternalType = enterSyntheticAnnotation("jdk.internal.PreviewFeature+Annotation");
         typeDescriptorType = enterClass("java.lang.invoke.TypeDescriptor");
         recordType = enterClass("java.lang.Record");
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Jun 26 04:15:33 2020 +0200
@@ -1429,6 +1429,9 @@
                         }
                     }
                 }
+            } else if (proxy.type.tsym.flatName() == syms.previewFeatureInternalType.tsym.flatName()) {
+                sym.flags_field |= PREVIEW_API;
+                setFlagIfAttributeTrue(proxy, sym, names.essentialAPI, PREVIEW_ESSENTIAL_API);
             } else {
                 if (proxy.type.tsym == syms.annotationTargetType.tsym) {
                     target = proxy;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Jun 26 04:15:33 2020 +0200
@@ -3761,15 +3761,7 @@
             nextToken();
             implementing = typeList();
         }
-        List<JCExpression> permitting = List.nil();
-        if (allowSealedTypes && token.kind == IDENTIFIER && token.name() == names.permits) {
-            checkSourceLevel(Feature.SEALED_CLASSES);
-            if ((mods.flags & Flags.SEALED) == 0) {
-                log.error(token.pos, Errors.InvalidPermitsClause(Fragments.ClassIsNotSealed("class")));
-            }
-            nextToken();
-            permitting = qualidentList(false);
-        }
+        List<JCExpression> permitting = permitsClause(mods, "class");
         List<JCTree> defs = classInterfaceOrRecordBody(name, false, false);
         JCClassDecl result = toP(F.at(pos).ClassDef(
             mods, name, typarams, extending, implementing, permitting, defs));
@@ -3849,15 +3841,7 @@
             nextToken();
             extending = typeList();
         }
-        List<JCExpression> permitting = List.nil();
-        if (allowSealedTypes && token.kind == IDENTIFIER && token.name() == names.permits) {
-            checkSourceLevel(Feature.SEALED_CLASSES);
-            if ((mods.flags & Flags.SEALED) == 0) {
-                log.error(token.pos, Errors.InvalidPermitsClause(Fragments.ClassIsNotSealed("interface")));
-            }
-            nextToken();
-            permitting = typeList();
-        }
+        List<JCExpression> permitting = permitsClause(mods, "interface");
         List<JCTree> defs;
         defs = classInterfaceOrRecordBody(name, true, false);
         JCClassDecl result = toP(F.at(pos).ClassDef(
@@ -3866,6 +3850,18 @@
         return result;
     }
 
+    List<JCExpression> permitsClause(JCModifiers mods, String classOrInterface) {
+        if (allowSealedTypes && token.kind == IDENTIFIER && token.name() == names.permits) {
+            checkSourceLevel(Feature.SEALED_CLASSES);
+            if ((mods.flags & Flags.SEALED) == 0) {
+                log.error(token.pos, Errors.InvalidPermitsClause(Fragments.ClassIsNotSealed(classOrInterface)));
+            }
+            nextToken();
+            return qualidentList(false);
+        }
+        return List.nil();
+    }
+
     /** EnumDeclaration = ENUM Ident [IMPLEMENTS TypeList] EnumBody
      *  @param mods    The modifiers starting the enum declaration
      *  @param dc       The documentation comment for the enum, or null.
--- a/src/jdk.hotspot.agent/linux/native/libsaproc/DwarfParser.cpp	Thu Jun 25 16:01:16 2020 -0700
+++ b/src/jdk.hotspot.agent/linux/native/libsaproc/DwarfParser.cpp	Fri Jun 26 04:15:33 2020 +0200
@@ -104,7 +104,9 @@
   DwarfParser *parser = new DwarfParser(reinterpret_cast<lib_info *>(lib));
   if (!parser->is_parseable()) {
     jclass ex_cls = env->FindClass("sun/jvm/hotspot/debugger/DebuggerException");
-    env->ThrowNew(ex_cls, "DWARF not found");
+    if (!env->ExceptionOccurred()) {
+        env->ThrowNew(ex_cls, "DWARF not found");
+    }
     return 0L;
   }
 
@@ -146,7 +148,9 @@
   DwarfParser *parser = reinterpret_cast<DwarfParser *>(get_dwarf_context(env, this_obj));
   if (!parser->process_dwarf(pc)) {
     jclass ex_cls = env->FindClass("sun/jvm/hotspot/debugger/DebuggerException");
-    env->ThrowNew(ex_cls, "Could not find PC in DWARF");
+    if (!env->ExceptionOccurred()) {
+        env->ThrowNew(ex_cls, "Could not find PC in DWARF");
+    }
     return;
   }
 }
--- a/test/hotspot/jtreg/ProblemList-aot.txt	Thu Jun 25 16:01:16 2020 -0700
+++ b/test/hotspot/jtreg/ProblemList-aot.txt	Fri Jun 26 04:15:33 2020 +0200
@@ -85,5 +85,8 @@
 compiler/intrinsics/sha/sanity/TestSHA1MultiBlockIntrinsics.java    8167430 generic-all
 compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java  8167430 generic-all
 
+compiler/ciReplay/TestServerVM.java      8248265 generic-all
+compiler/ciReplay/TestVMNoCompLevel.java 8248265 generic-all
+
 vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java   8226689 generic-all
 vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java  8226689 generic-all
--- a/test/hotspot/jtreg/ProblemList.txt	Thu Jun 25 16:01:16 2020 -0700
+++ b/test/hotspot/jtreg/ProblemList.txt	Fri Jun 26 04:15:33 2020 +0200
@@ -102,6 +102,7 @@
 
 serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatIntervalTest.java 8214032 generic-all
 serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatArrayCorrectnessTest.java 8224150 generic-all
+serviceability/jvmti/ModuleAwareAgents/ThreadStart/MAAThreadStart.java 8225354 windows-all
 
 #############################################################################
 
@@ -127,6 +128,7 @@
 vmTestbase/nsk/jdi/ThreadReference/stop/stop001/TestDescription.java 7034630 generic-all
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 8065773 generic-all
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 8065773 generic-all
+vmTestbase/nsk/jdi/stress/serial/mixed002/TestDescription.java 8246493 generic-all
 
 vmTestbase/nsk/jdb/eval/eval001/eval001.java 8221503 generic-all
 
--- a/test/jdk/ProblemList.txt	Thu Jun 25 16:01:16 2020 -0700
+++ b/test/jdk/ProblemList.txt	Fri Jun 26 04:15:33 2020 +0200
@@ -593,6 +593,8 @@
 com/sun/management/OperatingSystemMXBean/GetProcessCpuLoad.java 8030957 aix-all
 com/sun/management/OperatingSystemMXBean/GetSystemCpuLoad.java  8030957 aix-all
 
+java/lang/management/ThreadMXBean/ThreadMXBeanStateTest.java    8247426 generic-all
+
 sun/management/jdp/JdpDefaultsTest.java                         8241865 macosx-all
 sun/management/jdp/JdpJmxRemoteDynamicPortTest.java             8241865 macosx-all
 sun/management/jdp/JdpSpecificAddressTest.java                  8241865 macosx-all
@@ -628,6 +630,8 @@
 
 java/nio/channels/Selector/Wakeup.java                          6963118 windows-all
 
+sun/nio/ch/TestMaxCachedBufferSize.java                         8212812 macosx-all
+
 ############################################################################
 
 # jdk_rmi
@@ -914,6 +918,7 @@
 
 jdk/jfr/event/runtime/TestNetworkUtilizationEvent.java          8228990,8229370    generic-all
 jdk/jfr/event/compiler/TestCodeSweeper.java                     8225209    generic-all
+jdk/jfr/event/os/TestThreadContextSwitches.java                 8247776 windows-all
 
 ############################################################################
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java	Fri Jun 26 04:15:33 2020 +0200
@@ -0,0 +1,15 @@
+/**
+ * @test /nodynamiccopyright/
+ * @bug 8246704
+ * @summary Verify preview APIs are reported correctly when using --release.
+ * @compile/fail/ref=PreviewAPIsWithRelease.out -XDrawDiagnostics --release 14 PreviewAPIsWithRelease.java
+ */
+
+import com.sun.source.tree.Tree.Kind;
+
+public class PreviewAPIsWithRelease {
+    void test() {
+        "".stripIndent();
+        Kind r = Kind.RECORD;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.out	Fri Jun 26 04:15:33 2020 +0200
@@ -0,0 +1,4 @@
+PreviewAPIsWithRelease.java:12:11: compiler.err.is.preview: stripIndent()
+PreviewAPIsWithRelease.java:13:22: compiler.warn.is.preview: RECORD
+1 error
+1 warning
--- a/test/langtools/tools/javac/sealed/SealedCompilationTests.java	Thu Jun 25 16:01:16 2020 -0700
+++ b/test/langtools/tools/javac/sealed/SealedCompilationTests.java	Fri Jun 26 04:15:33 2020 +0200
@@ -768,8 +768,14 @@
         }
     }
 
-    public void testParameterizedPermitted() {
+    private static String[] PRIMITIVES_VOID_AND_PRIMITIVE_ARRAYS = new String[] {
+        "byte", "short", "int", "long", "float", "double", "char", "boolean", "void",
+        "byte[]", "short[]", "int[]", "long[]", "float[]", "double[]", "char[]", "boolean[]"
+    };
+
+    public void testPermitsClause() {
         for (String s : List.of(
+            // can't include a parameterized type
             """
             sealed class C<T> permits Sub<T> {}
             final class Sub<T> extends C<T> {}
@@ -777,10 +783,52 @@
             """
             sealed class C permits Sub<String> {}
             final class Sub<T> extends C {}
+            """,
+            """
+            sealed class C permits Sub<String> {}
+            non-sealed class Sub<T> extends C {}
+            """,
+            """
+            sealed interface IC permits ID<String> {}
+            non-sealed interface ID<T> extends IC {}
+            """,
+
+            // can't include an array type
+            """
+            sealed class C<T> permits Sub[] {}
+            final class Sub<T> extends C<T> {}
+            """,
+            """
+            sealed class C permits Sub[] {}
+            non-sealed class Sub<T> extends C {}
+            """,
+            """
+            sealed interface IC permits ID[] {}
+            non-sealed interface ID<T> extends IC {}
             """
             )) {
             assertFail("compiler.err.expected", s);
         }
+
+        for (String s : List.of(
+            // can't include primitives, void or primitive arrays
+            """
+            sealed class C<T> permits # {}
+            final class Sub<T> extends C<T> {}
+            """,
+            """
+            sealed class C permits # {}
+            non-sealed class Sub<T> extends C {}
+            """,
+            """
+            sealed interface IC permits # {}
+            non-sealed interface ID<T> extends IC {}
+            """
+            )) {
+            for (String t: PRIMITIVES_VOID_AND_PRIMITIVE_ARRAYS){
+                assertFail("compiler.err.expected", s, t);
+            }
+        }
     }
 
     private Path[] findJavaFiles(Path... paths) throws IOException {