changeset 57750:2887fbd13a6d

Merge
author henryjen
date Wed, 15 Jan 2020 01:54:35 +0000
parents 70a3551fea52 7de71c4f5e8f
children 3bb3842650aa
files test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetFlushInterval.java test/jdk/jdk/jfr/api/recording/time/TestSetFlushInterval.java
diffstat 175 files changed, 3348 insertions(+), 1407 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Jan 09 20:16:21 2020 +0000
+++ b/.hgtags	Wed Jan 15 01:54:35 2020 +0000
@@ -603,3 +603,6 @@
 2069b4bfd23b56b6fc659fba8b75aaaa23debbe0 jdk-14+28
 563fa900fa17c290ae516c7a3a69e8c069dde304 jdk-14+29
 d54ce919da90dab361995bb4d87be9851f00537a jdk-14+30
+d54ce919da90dab361995bb4d87be9851f00537a jdk-14+31
+d54ce919da90dab361995bb4d87be9851f00537a jdk-14+31
+decd3d2953b640f1043ee76953ff89238bff92e8 jdk-14+31
--- a/src/hotspot/cpu/aarch64/c1_FrameMap_aarch64.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/aarch64/c1_FrameMap_aarch64.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -49,6 +49,8 @@
       opr = as_oop_opr(reg);
     } else if (type == T_METADATA) {
       opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       opr = as_opr(reg);
     }
--- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -759,7 +759,7 @@
     if (is_reference_type(type)) {
       __ str(src->as_register(), frame_map()->address_for_slot(dest->single_stack_ix()));
       __ verify_oop(src->as_register());
-    } else if (type == T_METADATA || type == T_DOUBLE) {
+    } else if (type == T_METADATA || type == T_DOUBLE || type == T_ADDRESS) {
       __ str(src->as_register(), frame_map()->address_for_slot(dest->single_stack_ix()));
     } else {
       __ strw(src->as_register(), frame_map()->address_for_slot(dest->single_stack_ix()));
@@ -872,7 +872,7 @@
     if (is_reference_type(type)) {
       __ ldr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
       __ verify_oop(dest->as_register());
-    } else if (type == T_METADATA) {
+    } else if (type == T_METADATA || type == T_ADDRESS) {
       __ ldr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
     } else {
       __ ldrw(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
--- a/src/hotspot/cpu/arm/c1_FrameMap_arm.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/arm/c1_FrameMap_arm.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -80,10 +80,12 @@
     Register reg = r_1->as_Register();
     if (r_2->is_Register() && (type == T_LONG || type == T_DOUBLE)) {
       opr = as_long_opr(reg, r_2->as_Register());
-    } else if (type == T_OBJECT || type == T_ARRAY) {
+    } else if (is_reference_type(type)) {
       opr = as_oop_opr(reg);
     } else if (type == T_METADATA) {
       opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       // PreferInterpreterNativeStubs should ensure we never need to
       // handle a long opr passed as R3+stack_slot
--- a/src/hotspot/cpu/ppc/c1_FrameMap_ppc.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/ppc/c1_FrameMap_ppc.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -54,6 +54,10 @@
       opr = as_long_opr(reg);
     } else if (is_reference_type(type)) {
       opr = as_oop_opr(reg);
+    } else if (type == T_METADATA) {
+      opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       opr = as_opr(reg);
     }
--- a/src/hotspot/cpu/s390/c1_CodeStubs_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/c1_CodeStubs_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -294,7 +294,7 @@
 void PatchingStub::emit_code(LIR_Assembler* ce) {
   // Copy original code here.
   assert(NativeGeneralJump::instruction_size <= _bytes_to_copy && _bytes_to_copy <= 0xFF,
-         "not enough room for call");
+         "not enough room for call, need %d", _bytes_to_copy);
 
   NearLabel call_patch;
 
@@ -331,7 +331,7 @@
     }
 #endif
   } else {
-    // Make a copy the code which is going to be patched.
+    // Make a copy of the code which is going to be patched.
     for (int i = 0; i < _bytes_to_copy; i++) {
       address ptr = (address)(_pc_start + i);
       int a_byte = (*ptr) & 0xFF;
--- a/src/hotspot/cpu/s390/c1_FrameMap_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/c1_FrameMap_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -50,6 +50,8 @@
       opr = as_oop_opr(reg);
     } else if (type == T_METADATA) {
       opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       opr = as_opr(reg);
     }
--- a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -897,7 +897,7 @@
   bool needs_patching = (patch_code != lir_patch_none);
 
   if (addr->base()->type() == T_OBJECT) {
-    __ verify_oop(src);
+    __ verify_oop(src, FILE_AND_LINE);
   }
 
   PatchingStub* patch = NULL;
@@ -972,7 +972,7 @@
       } else {
         __ z_lg(dest->as_register(), disp_value, disp_reg, src);
       }
-      __ verify_oop(dest->as_register());
+      __ verify_oop(dest->as_register(), FILE_AND_LINE);
       break;
     }
     case T_FLOAT:
@@ -1006,8 +1006,8 @@
   if (dest->is_single_cpu()) {
     if (is_reference_type(type)) {
       __ mem2reg_opt(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()), true);
-      __ verify_oop(dest->as_register());
-    } else if (type == T_METADATA) {
+      __ verify_oop(dest->as_register(), FILE_AND_LINE);
+    } else if (type == T_METADATA || type == T_ADDRESS) {
       __ mem2reg_opt(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()), true);
     } else {
       __ mem2reg_opt(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()), false);
@@ -1033,9 +1033,9 @@
   if (src->is_single_cpu()) {
     const Address dst = frame_map()->address_for_slot(dest->single_stack_ix());
     if (is_reference_type(type)) {
-      __ verify_oop(src->as_register());
+      __ verify_oop(src->as_register(), FILE_AND_LINE);
       __ reg2mem_opt(src->as_register(), dst, true);
-    } else if (type == T_METADATA) {
+    } else if (type == T_METADATA || type == T_ADDRESS) {
       __ reg2mem_opt(src->as_register(), dst, true);
     } else {
       __ reg2mem_opt(src->as_register(), dst, false);
@@ -1079,7 +1079,7 @@
     ShouldNotReachHere();
   }
   if (is_reference_type(to_reg->type())) {
-    __ verify_oop(to_reg->as_register());
+    __ verify_oop(to_reg->as_register(), FILE_AND_LINE);
   }
 }
 
@@ -1095,7 +1095,7 @@
   bool needs_patching = (patch_code != lir_patch_none);
 
   if (addr->base()->is_oop_register()) {
-    __ verify_oop(dest);
+    __ verify_oop(dest, FILE_AND_LINE);
   }
 
   PatchingStub* patch = NULL;
@@ -1130,7 +1130,7 @@
   assert(disp_reg != Z_R0 || Immediate::is_simm20(disp_value), "should have set this up");
 
   if (is_reference_type(type)) {
-    __ verify_oop(from->as_register());
+    __ verify_oop(from->as_register(), FILE_AND_LINE);
   }
 
   bool short_disp = Immediate::is_uimm12(disp_value);
@@ -2412,7 +2412,7 @@
                      op->klass()->as_register(),
                      *op->stub()->entry());
   __ bind(*op->stub()->continuation());
-  __ verify_oop(op->obj()->as_register());
+  __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
 }
 
 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
@@ -2548,7 +2548,7 @@
   }
   assert(obj != k_RInfo, "must be different");
 
-  __ verify_oop(obj);
+  __ verify_oop(obj, FILE_AND_LINE);
 
   // Get object class.
   // Not a safepoint as obj null check happens earlier.
@@ -3009,7 +3009,7 @@
   assert(do_null || do_update, "why are we here?");
   assert(!TypeEntries::was_null_seen(current_klass) || do_update, "why are we here?");
 
-  __ verify_oop(obj);
+  __ verify_oop(obj, FILE_AND_LINE);
 
   if (do_null || tmp1 != obj DEBUG_ONLY(|| true)) {
     __ z_ltgr(tmp1, obj);
--- a/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -40,7 +40,7 @@
 
 void C1_MacroAssembler::inline_cache_check(Register receiver, Register iCache) {
   Label ic_miss, ic_hit;
-  verify_oop(receiver);
+  verify_oop(receiver, FILE_AND_LINE);
   int klass_offset = oopDesc::klass_offset_in_bytes();
 
   if (!ImplicitNullChecks || MacroAssembler::needs_explicit_null_check(klass_offset)) {
@@ -83,7 +83,7 @@
   assert_different_registers(hdr, obj, disp_hdr);
   NearLabel done;
 
-  verify_oop(obj);
+  verify_oop(obj, FILE_AND_LINE);
 
   // Load object header.
   z_lg(hdr, Address(obj, hdr_offset));
@@ -158,7 +158,7 @@
     // Load object.
     z_lg(obj, Address(disp_hdr, BasicObjectLock::obj_offset_in_bytes()));
   }
-  verify_oop(obj);
+  verify_oop(obj, FILE_AND_LINE);
   // Test if object header is pointing to the displaced header, and if so, restore
   // the displaced header in the object. If the object header is not pointing to
   // the displaced header, get the object header instead.
@@ -278,7 +278,7 @@
   //    call(RuntimeAddress(Runtime1::entry_for (Runtime1::dtrace_object_alloc_id)));
   //  }
 
-  verify_oop(obj);
+  verify_oop(obj, FILE_AND_LINE);
 }
 
 void C1_MacroAssembler::allocate_array(
@@ -336,16 +336,15 @@
   //   call(RuntimeAddress(Runtime1::entry_for (Runtime1::dtrace_object_alloc_id)));
   // }
 
-  verify_oop(obj);
+  verify_oop(obj, FILE_AND_LINE);
 }
 
 
 #ifndef PRODUCT
 
 void C1_MacroAssembler::verify_stack_oop(int stack_offset) {
-  Unimplemented();
-  // if (!VerifyOops) return;
-  // verify_oop_addr(Address(SP, stack_offset + STACK_BIAS));
+  if (!VerifyOops) return;
+  verify_oop_addr(Address(Z_SP, stack_offset), FILE_AND_LINE);
 }
 
 void C1_MacroAssembler::verify_not_null_oop(Register r) {
@@ -354,7 +353,7 @@
   compareU64_and_branch(r, (intptr_t)0, bcondNotEqual, not_null);
   stop("non-null oop required");
   bind(not_null);
-  verify_oop(r);
+  verify_oop(r, FILE_AND_LINE);
 }
 
 void C1_MacroAssembler::invalidate_registers(Register preserve1,
--- a/src/hotspot/cpu/s390/c1_Runtime1_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/c1_Runtime1_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -339,7 +339,7 @@
         oop_maps->add_gc_map(call_offset, map);
         restore_live_registers_except_r2(sasm);
 
-        __ verify_oop(obj);
+        __ verify_oop(obj, FILE_AND_LINE);
         __ z_br(Z_R14);
       }
       break;
@@ -405,7 +405,7 @@
         oop_maps->add_gc_map(call_offset, map);
         restore_live_registers_except_r2(sasm);
 
-        __ verify_oop(obj);
+        __ verify_oop(obj, FILE_AND_LINE);
         __ z_br(Z_R14);
       }
       break;
@@ -423,7 +423,7 @@
         restore_live_registers_except_r2(sasm);
 
         // Z_R2,: new multi array
-        __ verify_oop(Z_R2);
+        __ verify_oop(Z_R2, FILE_AND_LINE);
         __ z_br(Z_R14);
       }
       break;
--- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -400,11 +400,11 @@
 
   __ z_tmll(tmp1, JNIHandles::weak_tag_mask); // Test for jweak tag.
   __ z_braz(Lnot_weak);
-  __ verify_oop(value);
+  __ verify_oop(value, FILE_AND_LINE);
   DecoratorSet decorators = IN_NATIVE | ON_PHANTOM_OOP_REF;
   g1_write_barrier_pre(masm, decorators, (const Address*)NULL, value, noreg, tmp1, tmp2, true);
   __ bind(Lnot_weak);
-  __ verify_oop(value);
+  __ verify_oop(value, FILE_AND_LINE);
   __ bind(Ldone);
 }
 
--- a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -108,7 +108,7 @@
   __ z_nill(value, ~JNIHandles::weak_tag_mask);
   __ z_lg(value, 0, value); // Resolve (untagged) jobject.
 
-  __ verify_oop(value);
+  __ verify_oop(value, FILE_AND_LINE);
   __ bind(Ldone);
 }
 
--- a/src/hotspot/cpu/s390/interp_masm_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/interp_masm_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1664,7 +1664,7 @@
     compareU64_and_branch(obj, (intptr_t)0, Assembler::bcondEqual, null_seen);
   }
 
-  verify_oop(obj);
+  MacroAssembler::verify_oop(obj, FILE_AND_LINE);
   load_klass(klass, obj);
 
   // Klass seen before, nothing to do (regardless of unknown bit).
@@ -2073,7 +2073,7 @@
 }
 
 void InterpreterMacroAssembler::verify_oop(Register reg, TosState state) {
-  if (state == atos) { MacroAssembler::verify_oop(reg); }
+  if (state == atos) { MacroAssembler::verify_oop(reg, FILE_AND_LINE); }
 }
 
 // Inline assembly for:
--- a/src/hotspot/cpu/s390/macroAssembler_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/macroAssembler_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -3587,7 +3587,7 @@
   z_lg(oop_result, Address(Z_thread, JavaThread::vm_result_offset()));
   clear_mem(Address(Z_thread, JavaThread::vm_result_offset()), sizeof(void*));
 
-  verify_oop(oop_result);
+  verify_oop(oop_result, FILE_AND_LINE);
 }
 
 void MacroAssembler::get_vm_result_2(Register result) {
@@ -6813,26 +6813,94 @@
   }
 }
 
+// Save and restore functions: Exclude Z_R0.
+void MacroAssembler::save_volatile_regs(Register dst, int offset, bool include_fp, bool include_flags) {
+  z_stmg(Z_R1, Z_R5, offset, dst); offset += 5 * BytesPerWord;
+  if (include_fp) {
+    z_std(Z_F0, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F1, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F2, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F3, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F4, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F5, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F6, Address(dst, offset)); offset += BytesPerWord;
+    z_std(Z_F7, Address(dst, offset)); offset += BytesPerWord;
+  }
+  if (include_flags) {
+    Label done;
+    z_mvi(Address(dst, offset), 2); // encoding: equal
+    z_bre(done);
+    z_mvi(Address(dst, offset), 4); // encoding: higher
+    z_brh(done);
+    z_mvi(Address(dst, offset), 1); // encoding: lower
+    bind(done);
+  }
+}
+void MacroAssembler::restore_volatile_regs(Register src, int offset, bool include_fp, bool include_flags) {
+  z_lmg(Z_R1, Z_R5, offset, src); offset += 5 * BytesPerWord;
+  if (include_fp) {
+    z_ld(Z_F0, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F1, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F2, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F3, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F4, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F5, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F6, Address(src, offset)); offset += BytesPerWord;
+    z_ld(Z_F7, Address(src, offset)); offset += BytesPerWord;
+  }
+  if (include_flags) {
+    z_cli(Address(src, offset), 2); // see encoding above
+  }
+}
+
 // Plausibility check for oops.
 void MacroAssembler::verify_oop(Register oop, const char* msg) {
   if (!VerifyOops) return;
 
   BLOCK_COMMENT("verify_oop {");
-  Register tmp = Z_R0;
-  unsigned int nbytes_save = 5*BytesPerWord;
-  address entry = StubRoutines::verify_oop_subroutine_entry_address();
+  unsigned int nbytes_save = (5 + 8 + 1) * BytesPerWord;
+  address entry_addr = StubRoutines::verify_oop_subroutine_entry_address();
 
   save_return_pc();
-  push_frame_abi160(nbytes_save);
-  z_stmg(Z_R1, Z_R5, frame::z_abi_160_size, Z_SP);
-
-  z_lgr(Z_ARG2, oop);
-  load_const(Z_ARG1, (address) msg);
-  load_const(Z_R1, entry);
+
+  // Push frame, but preserve flags
+  z_lgr(Z_R0, Z_SP);
+  z_lay(Z_SP, -((int64_t)nbytes_save + frame::z_abi_160_size), Z_SP);
+  z_stg(Z_R0, _z_abi(callers_sp), Z_SP);
+
+  save_volatile_regs(Z_SP, frame::z_abi_160_size, true, true);
+
+  lgr_if_needed(Z_ARG2, oop);
+  load_const_optimized(Z_ARG1, (address)msg);
+  load_const_optimized(Z_R1, entry_addr);
   z_lg(Z_R1, 0, Z_R1);
   call_c(Z_R1);
 
-  z_lmg(Z_R1, Z_R5, frame::z_abi_160_size, Z_SP);
+  restore_volatile_regs(Z_SP, frame::z_abi_160_size, true, true);
+  pop_frame();
+  restore_return_pc();
+
+  BLOCK_COMMENT("} verify_oop ");
+}
+
+void MacroAssembler::verify_oop_addr(Address addr, const char* msg) {
+  if (!VerifyOops) return;
+
+  BLOCK_COMMENT("verify_oop {");
+  unsigned int nbytes_save = (5 + 8) * BytesPerWord;
+  address entry_addr = StubRoutines::verify_oop_subroutine_entry_address();
+
+  save_return_pc();
+  unsigned int frame_size = push_frame_abi160(nbytes_save); // kills Z_R0
+  save_volatile_regs(Z_SP, frame::z_abi_160_size, true, false);
+
+  z_lg(Z_ARG2, addr.plus_disp(frame_size));
+  load_const_optimized(Z_ARG1, (address)msg);
+  load_const_optimized(Z_R1, entry_addr);
+  z_lg(Z_R1, 0, Z_R1);
+  call_c(Z_R1);
+
+  restore_volatile_regs(Z_SP, frame::z_abi_160_size, true, false);
   pop_frame();
   restore_return_pc();
 
--- a/src/hotspot/cpu/s390/macroAssembler_s390.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/macroAssembler_s390.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -973,8 +973,15 @@
   // Verify Z_thread contents.
   void verify_thread();
 
+  // Save and restore functions: Exclude Z_R0.
+  void save_volatile_regs(   Register dst, int offset, bool include_fp, bool include_flags);
+  void restore_volatile_regs(Register src, int offset, bool include_fp, bool include_flags);
+
   // Only if +VerifyOops.
+  // Kills Z_R0.
   void verify_oop(Register reg, const char* s = "broken oop");
+  // Kills Z_R0, condition code.
+  void verify_oop_addr(Address addr, const char* msg = "contains broken oop");
 
   // TODO: verify_method and klass metadata (compare against vptr?).
   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
--- a/src/hotspot/cpu/s390/methodHandles_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/methodHandles_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -85,7 +85,7 @@
 
   BLOCK_COMMENT("verify_klass {");
 
-  __ verify_oop(obj_reg);
+  __ verify_oop(obj_reg, FILE_AND_LINE);
   __ compareU64_and_branch(obj_reg, (intptr_t)0L, Assembler::bcondEqual, L_bad);
   __ load_klass(temp_reg, obj_reg);
   // klass_addr is a klass in allstatic SystemDictionaryHandles. Can't get GCed.
@@ -194,22 +194,22 @@
   BLOCK_COMMENT("jump_to_lambda_form {");
 
   // Load the invoker, as MH -> MH.form -> LF.vmentry
-  __ verify_oop(recv);
+  __ verify_oop(recv, FILE_AND_LINE);
   __ load_heap_oop(method_temp,
                    Address(recv,
                            NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())),
                    noreg, noreg, IS_NOT_NULL);
-  __ verify_oop(method_temp);
+  __ verify_oop(method_temp, FILE_AND_LINE);
   __ load_heap_oop(method_temp,
                    Address(method_temp,
                            NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())),
                    noreg, noreg, IS_NOT_NULL);
-  __ verify_oop(method_temp);
+  __ verify_oop(method_temp, FILE_AND_LINE);
   __ load_heap_oop(method_temp,
                    Address(method_temp,
                            NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())),
                    noreg, noreg, IS_NOT_NULL);
-  __ verify_oop(method_temp);
+  __ verify_oop(method_temp, FILE_AND_LINE);
   __ z_lg(method_temp,
           Address(method_temp,
                   NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())));
@@ -385,7 +385,7 @@
   Register temp1_recv_klass = temp1;
 
   if (iid != vmIntrinsics::_linkToStatic) {
-    __ verify_oop(receiver_reg);
+    __ verify_oop(receiver_reg, FILE_AND_LINE);
     if (iid == vmIntrinsics::_linkToSpecial) {
       // Don't actually load the klass; just null-check the receiver.
       __ null_check(receiver_reg);
--- a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -892,9 +892,9 @@
       if (r->is_stack()) {
         __ z_lg(Z_R0_scratch,
                 Address(Z_SP, r->reg2stack() * VMRegImpl::stack_slot_size + wordSize));
-        __ verify_oop(Z_R0_scratch);
+        __ verify_oop(Z_R0_scratch, FILE_AND_LINE);
       } else {
-        __ verify_oop(r->as_Register());
+        __ verify_oop(r->as_Register(), FILE_AND_LINE);
       }
     }
   }
@@ -2686,7 +2686,7 @@
       __ z_ltgr(Z_ARG1, Z_ARG1);
       __ z_bre(ic_miss);
     }
-    __ verify_oop(Z_ARG1);
+    __ verify_oop(Z_ARG1, FILE_AND_LINE);
 
     // Check ic: object class <-> cached class
     // Compress cached class for comparison. That's more efficient.
@@ -2955,7 +2955,7 @@
 #ifdef ASSERT
   // verify that there is really an exception oop in JavaThread
   __ z_lg(Z_ARG1, Address(Z_thread, JavaThread::exception_oop_offset()));
-  __ verify_oop(Z_ARG1);
+  __ MacroAssembler::verify_oop(Z_ARG1, FILE_AND_LINE);
 
   // verify that there is no pending exception
   __ asm_assert_mem8_is_zero(in_bytes(Thread::pending_exception_offset()), Z_thread,
--- a/src/hotspot/cpu/s390/stubGenerator_s390.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/s390/stubGenerator_s390.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -667,6 +667,17 @@
     return start;
   }
 
+#if !defined(PRODUCT)
+  // Wrapper which calls oopDesc::is_oop_or_null()
+  // Only called by MacroAssembler::verify_oop
+  static void verify_oop_helper(const char* message, oopDesc* o) {
+    if (!oopDesc::is_oop_or_null(o)) {
+      fatal("%s. oop: " PTR_FORMAT, message, p2i(o));
+    }
+    ++ StubRoutines::_verify_oop_count;
+  }
+#endif
+
   // Return address of code to be called from code generated by
   // MacroAssembler::verify_oop.
   //
@@ -679,6 +690,11 @@
     // StubCodeMark mark(this, "StubRoutines", "verify_oop_stub");
 
     address start = 0;
+
+#if !defined(PRODUCT)
+    start = CAST_FROM_FN_PTR(address, verify_oop_helper);
+#endif
+
     return start;
   }
 
--- a/src/hotspot/cpu/sparc/c1_FrameMap_sparc.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/sparc/c1_FrameMap_sparc.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -55,6 +55,8 @@
       opr = as_oop_opr(reg);
     } else if (type == T_METADATA) {
       opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       opr = as_opr(reg);
     }
--- a/src/hotspot/cpu/x86/c1_FrameMap_x86.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/x86/c1_FrameMap_x86.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -54,6 +54,8 @@
       opr = as_oop_opr(reg);
     } else if (type == T_METADATA) {
       opr = as_metadata_opr(reg);
+    } else if (type == T_ADDRESS) {
+      opr = as_address_opr(reg);
     } else {
       opr = as_opr(reg);
     }
--- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -935,7 +935,7 @@
     if (is_reference_type(type)) {
       __ verify_oop(src->as_register());
       __ movptr (dst, src->as_register());
-    } else if (type == T_METADATA) {
+    } else if (type == T_METADATA || type == T_ADDRESS) {
       __ movptr (dst, src->as_register());
     } else {
       __ movl (dst, src->as_register());
@@ -1116,7 +1116,7 @@
     if (is_reference_type(type)) {
       __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
       __ verify_oop(dest->as_register());
-    } else if (type == T_METADATA) {
+    } else if (type == T_METADATA || type == T_ADDRESS) {
       __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
     } else {
       __ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
--- a/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -30,6 +30,8 @@
 #include "code/nativeInst.hpp"
 #include "code/vtableStubs.hpp"
 #include "gc/shared/gcLocker.hpp"
+#include "gc/shared/barrierSet.hpp"
+#include "gc/shared/barrierSetAssembler.hpp"
 #include "interpreter/interpreter.hpp"
 #include "logging/log.hpp"
 #include "memory/resourceArea.hpp"
--- a/src/hotspot/cpu/x86/x86.ad	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/cpu/x86/x86.ad	Wed Jan 15 01:54:35 2020 +0000
@@ -2143,7 +2143,7 @@
 
 // Replaces legVec during post-selection cleanup. See above.
 operand legVecZ() %{
-  constraint(ALLOC_IN_RC(vectorz_reg_vl));
+  constraint(ALLOC_IN_RC(vectorz_reg_legacy));
   match(VecZ);
 
   format %{ %}
--- a/src/hotspot/share/c1/c1_FrameMap.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/c1/c1_FrameMap.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -185,6 +185,10 @@
     return LIR_OprFact::single_cpu_metadata(cpu_reg2rnr(r));
   }
 
+  static LIR_Opr as_address_opr(Register r) {
+    return LIR_OprFact::single_cpu_address(cpu_reg2rnr(r));
+  }
+
   FrameMap(ciMethod* method, int monitors, int reserved_argument_area_size);
   bool finalize_frame(int nof_slots);
 
--- a/src/hotspot/share/code/debugInfo.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/code/debugInfo.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -51,7 +51,15 @@
 }
 
 oop DebugInfoReadStream::read_oop() {
-  oop o = code()->oop_at(read_int());
+  nmethod* nm = const_cast<CompiledMethod*>(code())->as_nmethod_or_null();
+  oop o;
+  if (nm != NULL) {
+    // Despite these oops being found inside nmethods that are on-stack,
+    // they are not kept alive by all GCs (e.g. G1 and Shenandoah).
+    o = nm->oop_at_phantom(read_int());
+  } else {
+    o = code()->oop_at(read_int());
+  }
   assert(oopDesc::is_oop_or_null(o), "oop only");
   return o;
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -199,12 +199,8 @@
         _heap->in_collection_set(obj) &&
         obj == fwd) {
       Thread *t = Thread::current();
-      if (t->is_GC_task_thread()) {
-        return _heap->evacuate_object(obj, t);
-      } else {
-        ShenandoahEvacOOMScope oom_evac_scope;
-        return _heap->evacuate_object(obj, t);
-      }
+      ShenandoahEvacOOMScope oom_evac_scope;
+      return _heap->evacuate_object(obj, t);
     } else {
       return fwd;
     }
@@ -252,9 +248,7 @@
 }
 
 oop ShenandoahBarrierSet::load_reference_barrier_native(oop obj, narrowOop* load_addr) {
-  // Assumption: narrow oop version should not be used anywhere.
-  ShouldNotReachHere();
-  return NULL;
+  return load_reference_barrier_native_impl(obj, load_addr);
 }
 
 template <class T>
@@ -264,7 +258,7 @@
   }
 
   ShenandoahMarkingContext* const marking_context = _heap->marking_context();
-  if (_heap->is_evacuation_in_progress() && !marking_context->is_marked(obj)) {
+  if (_heap->is_concurrent_root_in_progress() && !marking_context->is_marked(obj)) {
     Thread* thr = Thread::current();
     if (thr->is_Java_thread()) {
       return NULL;
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -57,7 +57,6 @@
   }
 
   // Heal oops and disarm
-  ShenandoahEvacOOMScope scope;
   ShenandoahNMethod::heal_nmethod(nm);
   ShenandoahNMethod::disarm_nmethod(nm);
   return true;
--- a/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -111,12 +111,13 @@
 
 template <class T>
 void ShenandoahEvacuateUpdateRootsClosure::do_oop_work(T* p) {
-  assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
+  assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress");
 
   T o = RawAccess<>::oop_load(p);
   if (! CompressedOops::is_null(o)) {
     oop obj = CompressedOops::decode_not_null(o);
     if (_heap->in_collection_set(obj)) {
+      assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
       shenandoah_assert_marked(p, obj);
       oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
       if (resolved == obj) {
@@ -139,11 +140,12 @@
 }
 
 void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(oop* p) {
-  assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
+  assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress");
 
   oop obj = RawAccess<>::oop_load(p);
   if (! CompressedOops::is_null(obj)) {
     if (_heap->in_collection_set(obj)) {
+      assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
       shenandoah_assert_marked(p, obj);
       oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
       if (resolved == obj) {
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -155,7 +155,7 @@
   }
 }
 
-void ShenandoahCodeRoots::prepare_concurrent_unloading() {
+void ShenandoahCodeRoots::arm_nmethods() {
   assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
   _disarmed_value ++;
   // 0 is reserved for new nmethod
@@ -215,7 +215,6 @@
 
     if (nm->is_unloading()) {
       ShenandoahReentrantLocker locker(nm_data->lock());
-      ShenandoahEvacOOMScope evac_scope;
       unlink(nm);
       return;
     }
@@ -223,8 +222,9 @@
     ShenandoahReentrantLocker locker(nm_data->lock());
 
     // Heal oops and disarm
-    ShenandoahEvacOOMScope evac_scope;
-    ShenandoahNMethod::heal_nmethod(nm);
+    if (_heap->is_evacuation_in_progress()) {
+      ShenandoahNMethod::heal_nmethod(nm);
+    }
     ShenandoahNMethod::disarm_nmethod(nm);
 
     // Clear compiled ICs and exception caches
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -109,7 +109,7 @@
   // Concurrent nmethod unloading support
   static void unlink(WorkGang* workers, bool unloading_occurred);
   static void purge(WorkGang* workers);
-  static void prepare_concurrent_unloading();
+  static void arm_nmethods();
   static int  disarmed_value()         { return _disarmed_value; }
   static int* disarmed_value_address() { return &_disarmed_value; }
 
--- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2019, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -47,6 +47,8 @@
 }
 
 bool ShenandoahConcurrentRoots::should_do_concurrent_class_unloading() {
+  ShenandoahHeap* const heap = ShenandoahHeap::heap();
   return can_do_concurrent_class_unloading() &&
-         !ShenandoahHeap::heap()->is_stw_gc_in_progress();
+         heap->unload_classes() &&
+         !heap->is_stw_gc_in_progress();
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -123,11 +123,3 @@
 ShenandoahEvacOOMScope::~ShenandoahEvacOOMScope() {
   ShenandoahHeap::heap()->leave_evacuation();
 }
-
-ShenandoahEvacOOMScopeLeaver::ShenandoahEvacOOMScopeLeaver() {
-  ShenandoahHeap::heap()->leave_evacuation();
-}
-
-ShenandoahEvacOOMScopeLeaver::~ShenandoahEvacOOMScopeLeaver() {
-  ShenandoahHeap::heap()->enter_evacuation();
-}
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -119,10 +119,4 @@
   ~ShenandoahEvacOOMScope();
 };
 
-class ShenandoahEvacOOMScopeLeaver : public StackObj {
-public:
-  ShenandoahEvacOOMScopeLeaver();
-  ~ShenandoahEvacOOMScopeLeaver();
-};
-
 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHEVACOOMHANDLER_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -542,6 +542,7 @@
   if (is_degenerated_gc_in_progress())       st->print("degenerated gc, ");
   if (is_full_gc_in_progress())              st->print("full gc, ");
   if (is_full_gc_move_in_progress())         st->print("full gc move, ");
+  if (is_concurrent_root_in_progress())      st->print("concurrent roots, ");
 
   if (cancelled_gc()) {
     st->print("cancelled");
@@ -1540,6 +1541,11 @@
       _free_set->rebuild();
     }
 
+    if (!is_degenerated_gc_in_progress()) {
+      prepare_concurrent_roots();
+      prepare_concurrent_unloading();
+    }
+
     // If collection set has candidates, start evacuation.
     // Otherwise, bypass the rest of the cycle.
     if (!collection_set()->is_empty()) {
@@ -1554,8 +1560,9 @@
       set_has_forwarded_objects(true);
 
       if (!is_degenerated_gc_in_progress()) {
-        prepare_concurrent_roots();
-        prepare_concurrent_unloading();
+        if (ShenandoahConcurrentRoots::should_do_concurrent_class_unloading()) {
+          ShenandoahCodeRoots::arm_nmethods();
+        }
         evacuate_and_update_roots();
       }
 
@@ -1669,7 +1676,7 @@
 };
 
 void ShenandoahHeap::op_roots() {
-  if (is_evacuation_in_progress()) {
+  if (is_concurrent_root_in_progress()) {
     if (ShenandoahConcurrentRoots::should_do_concurrent_class_unloading()) {
       _unloader.unload();
     }
@@ -2235,7 +2242,6 @@
 void ShenandoahHeap::prepare_concurrent_unloading() {
   assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
   if (ShenandoahConcurrentRoots::should_do_concurrent_class_unloading()) {
-    ShenandoahCodeRoots::prepare_concurrent_unloading();
     _unloader.prepare();
   }
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -174,6 +174,7 @@
   assert(data != NULL, "Sanity");
   assert(data->lock()->owned_by_self(), "Must hold the lock");
 
+  ShenandoahEvacOOMScope evac_scope;
   ShenandoahEvacuateUpdateRootsClosure cl;
   data->oops_do(&cl, true /*fix relocation*/);
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahParallelCleaning.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahParallelCleaning.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -41,7 +41,6 @@
 }
 
 void ShenandoahClassUnloadingTask::work(uint worker_id) {
-  ShenandoahEvacOOMScope scope;
   _code_cache_task.work(worker_id);
   // Clean all klasses that were not unloaded.
   // The weak metadata in klass doesn't need to be
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -226,6 +226,7 @@
   ShenandoahThreadRoots                                     _thread_roots;
   ShenandoahCodeCacheRoots<ITR>                             _code_roots;
   ShenandoahVMRoots<false /*concurrent*/ >                  _vm_roots;
+  ShenandoahStringDedupRoots                                _dedup_roots;
   ShenandoahClassLoaderDataRoots<false /*concurrent*/, false /*single threaded*/>
                                                             _cld_roots;
 public:
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2019, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -250,6 +250,9 @@
   if (code != NULL && !ShenandoahConcurrentScanCodeRoots) {
     _code_roots.code_blobs_do(code, worker_id);
   }
+
+  AlwaysTrueClosure always_true;
+  _dedup_roots.oops_do(&always_true, oops, worker_id);
 }
 
 template <typename ITR>
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -173,7 +173,6 @@
   void work(uint worker_id) {
     ShenandoahParallelWorkerSession worker_session(worker_id);
 
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahObjToScanQueueSet* queues = _heap->traversal_gc()->task_queues();
     ShenandoahObjToScanQueue* q = queues->queue(worker_id);
 
@@ -194,9 +193,6 @@
       } else {
         _rp->roots_do(worker_id, &roots_cl, &cld_cl, &code_cl);
       }
-
-      AlwaysTrueClosure is_alive;
-      _dedup_roots.oops_do(&is_alive, &roots_cl, worker_id);
     }
   }
 };
@@ -214,7 +210,6 @@
   void work(uint worker_id) {
     ShenandoahConcurrentWorkerSession worker_session(worker_id);
     ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
 
     // Drain all outstanding work in queues.
@@ -237,7 +232,6 @@
   void work(uint worker_id) {
     ShenandoahParallelWorkerSession worker_session(worker_id);
 
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
 
     ShenandoahObjToScanQueueSet* queues = traversal_gc->task_queues();
@@ -542,7 +536,6 @@
 
     if (work == 0) {
       // No more work, try to terminate
-      ShenandoahEvacOOMScopeLeaver oom_scope_leaver;
       ShenandoahSuspendibleThreadSetLeaver stsl(sts_yield && ShenandoahSuspendibleWorkers);
       ShenandoahTerminationTimingsTracker term_tracker(worker_id);
       ShenandoahTerminatorTerminator tt(_heap);
@@ -811,7 +804,6 @@
 
   template <class T>
   inline void do_oop_work(T* p) {
-    ShenandoahEvacOOMScope evac_scope;
     _traversal_gc->process_oop<T, false /* string dedup */, false /* degen */, true /* atomic update */>(p, _thread, _queue, _mark_context);
   }
 
@@ -834,7 +826,6 @@
 
   template <class T>
   inline void do_oop_work(T* p) {
-    ShenandoahEvacOOMScope evac_scope;
     _traversal_gc->process_oop<T, false /* string dedup */, true /* degen */, false /* atomic update */>(p, _thread, _queue, _mark_context);
   }
 
@@ -861,7 +852,6 @@
     assert(worker_id == 0, "The code below is single-threaded, only one worker is expected");
     ShenandoahParallelWorkerSession worker_session(worker_id);
     ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
-    ShenandoahEvacOOMScope oom_evac_scope;
 
     ShenandoahHeap* sh = ShenandoahHeap::heap();
 
@@ -968,7 +958,6 @@
     assert(sh->process_references(), "why else would we be here?");
     shenandoah_assert_rp_isalive_installed();
 
-    ShenandoahEvacOOMScope evac_scope;
     traversal_gc->main_loop(_worker_id, _terminator, false);
 
     if (_reset_terminator) {
@@ -1010,7 +999,6 @@
   }
 
   void work(uint worker_id) {
-    ShenandoahEvacOOMScope oom_evac_scope;
     assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at a safepoint");
     ShenandoahHeap* heap = ShenandoahHeap::heap();
     ShenandoahTraversalDrainMarkingStackClosure complete_gc(worker_id, _terminator);
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -51,6 +51,7 @@
     } else if (_heap->in_collection_set(obj)) {
       oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
       if (obj == forw) {
+        ShenandoahEvacOOMScope evac_scope;
         forw = _heap->evacuate_object(obj, thread);
       }
       shenandoah_assert_forwarded_except(p, obj, _heap->cancelled_gc());
--- a/src/hotspot/share/gc/shenandoah/shenandoahUnload.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahUnload.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -79,7 +79,7 @@
 public:
   virtual bool is_unloading(CompiledMethod* method) const {
     nmethod* const nm = method->as_nmethod();
-    guarantee(ShenandoahHeap::heap()->is_evacuation_in_progress(), "Only this phase");
+    guarantee(ShenandoahHeap::heap()->is_concurrent_root_in_progress(), "Only this phase");
     ShenandoahNMethod* data = ShenandoahNMethod::gc_data(nm);
     ShenandoahReentrantLocker locker(data->lock());
     ShenandoahIsUnloadingOopClosure cl;
@@ -166,7 +166,7 @@
 
 void ShenandoahUnload::unload() {
   assert(ShenandoahConcurrentRoots::can_do_concurrent_class_unloading(), "Why we here?");
-  if (!ShenandoahHeap::heap()->is_evacuation_in_progress()) {
+  if (!ShenandoahHeap::heap()->is_concurrent_root_in_progress()) {
     return;
   }
 
--- a/src/hotspot/share/jfr/metadata/metadata.xml	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/jfr/metadata/metadata.xml	Wed Jan 15 01:54:35 2020 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
- Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -1023,36 +1023,6 @@
     <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
   </Event>
 
-  <Event name="FlushStorage" category="Flight Recorder" label="Flush Storage" thread="false" experimental="true">
-    <Field type="ulong" name="flushId" label="Flush Identifier" relation="FlushId" />
-    <Field type="ulong" name="elements" label="Elements Written" />
-    <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
-  </Event>
-
-  <Event name="FlushStacktrace" category="Flight Recorder" label="Flush Stacktrace" thread="false" experimental="true">
-    <Field type="ulong" name="flushId" label="Flush Identifier" relation="FlushId" />
-    <Field type="ulong" name="elements" label="Elements Written" />
-    <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
-  </Event>
-
-  <Event name="FlushStringPool" category="Flight Recorder" label="Flush String Pool" thread="false" experimental="true">
-    <Field type="ulong" name="flushId" label="Flush Identifier" relation="FlushId" />
-    <Field type="ulong" name="elements" label="Elements Written" />
-    <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
-  </Event>
-
-  <Event name="FlushMetadata" category="Flight Recorder" label="Flush Metadata" thread="false" experimental="true">
-    <Field type="ulong" name="flushId" label="Flush Identifier" relation="FlushId" />
-    <Field type="ulong" name="elements" label="Elements Written" />
-    <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
-  </Event>
-
-  <Event name="FlushTypeSet" category="Flight Recorder" label="Flush Type Set" thread="false" experimental="true">
-    <Field type="ulong" name="flushId" label="Flush Identifier" relation="FlushId" />
-    <Field type="ulong" name="elements" label="Elements Written" />
-    <Field type="ulong" contentType="bytes" name="size" label="Size Written" />
-  </Event>
-
   <Type name="DeoptimizationReason" label="Deoptimization Reason">
     <Field type="string" name="reason" label="Reason" />
   </Type>
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -97,10 +97,10 @@
   if (METHOD_FLAG_NOT_USED_THIS_EPOCH(method)) {
     SET_METHOD_AND_CLASS_USED_THIS_EPOCH(klass);
     SET_METHOD_FLAG_USED_THIS_EPOCH(method);
+    assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant");
+    assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant");
     JfrTraceIdEpoch::set_changed_tag_state();
   }
-  assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant");
-  assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant");
   return (METHOD_ID(klass, method));
 }
 
--- a/src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,13 +58,12 @@
 // incremented on each flushpoint
 static u8 flushpoint_id = 0;
 
-template <typename E, typename Instance, size_t(Instance::*func)()>
+template <typename Instance, size_t(Instance::*func)()>
 class Content {
  private:
   Instance& _instance;
   u4 _elements;
  public:
-  typedef E EventType;
   Content(Instance& instance) : _instance(instance), _elements(0) {}
   bool process() {
     _elements = (u4)(_instance.*func)();
@@ -82,7 +81,6 @@
   Content& _content;
   const int64_t _start_offset;
  public:
-  typedef typename Content::EventType EventType;
 
   WriteContent(JfrChunkWriter& cw, Content& content) :
     _start_time(JfrTicks::now()),
@@ -128,14 +126,6 @@
     return (u4)(end_offset() - start_offset());
   }
 
-  static bool is_event_enabled() {
-    return EventType::is_enabled();
-  }
-
-  static u8 event_id() {
-    return EventType::eventId;
-  }
-
   void write_elements(int64_t offset) {
     _cw.write_padded_at_offset<u4>(elements(), offset);
   }
@@ -199,22 +189,15 @@
 }
 
 template <typename Functor>
-static void write_flush_event(Functor& f) {
-  if (Functor::is_event_enabled()) {
-    typename Functor::EventType e(UNTIMED);
-    e.set_starttime(f.start_time());
-    e.set_endtime(f.end_time());
-    e.set_flushId(flushpoint_id);
-    e.set_elements(f.elements());
-    e.set_size(f.size());
-    e.commit();
-  }
-}
-
-template <typename Functor>
 static u4 invoke_with_flush_event(Functor& f) {
   const u4 elements = invoke(f);
-  write_flush_event(f);
+  EventFlush e(UNTIMED);
+  e.set_starttime(f.start_time());
+  e.set_endtime(f.end_time());
+  e.set_flushId(flushpoint_id);
+  e.set_elements(f.elements());
+  e.set_size(f.size());
+  e.commit();
   return elements;
 }
 
@@ -226,7 +209,6 @@
   bool _clear;
 
  public:
-  typedef EventFlushStacktrace EventType;
   StackTraceRepository(JfrStackTraceRepository& repo, JfrChunkWriter& cw, bool clear) :
     _repo(repo), _cw(cw), _elements(0), _clear(clear) {}
   bool process() {
@@ -242,7 +224,7 @@
 static u4 flush_stacktrace(JfrStackTraceRepository& stack_trace_repo, JfrChunkWriter& chunkwriter) {
   StackTraceRepository str(stack_trace_repo, chunkwriter, false);
   WriteStackTrace wst(chunkwriter, str, TYPE_STACKTRACE);
-  return invoke_with_flush_event(wst);
+  return invoke(wst);
 }
 
 static u4 write_stacktrace(JfrStackTraceRepository& stack_trace_repo, JfrChunkWriter& chunkwriter, bool clear) {
@@ -251,14 +233,14 @@
   return invoke(wst);
 }
 
-typedef Content<EventFlushStorage, JfrStorage, &JfrStorage::write> Storage;
+typedef Content<JfrStorage, &JfrStorage::write> Storage;
 typedef WriteContent<Storage> WriteStorage;
 
 static size_t flush_storage(JfrStorage& storage, JfrChunkWriter& chunkwriter) {
   assert(chunkwriter.is_valid(), "invariant");
   Storage fsf(storage);
   WriteStorage fs(chunkwriter, fsf);
-  return invoke_with_flush_event(fs);
+  return invoke(fs);
 }
 
 static size_t write_storage(JfrStorage& storage, JfrChunkWriter& chunkwriter) {
@@ -268,15 +250,15 @@
   return invoke(fs);
 }
 
-typedef Content<EventFlushStringPool, JfrStringPool, &JfrStringPool::write> StringPool;
-typedef Content<EventFlushStringPool, JfrStringPool, &JfrStringPool::write_at_safepoint> StringPoolSafepoint;
+typedef Content<JfrStringPool, &JfrStringPool::write> StringPool;
+typedef Content<JfrStringPool, &JfrStringPool::write_at_safepoint> StringPoolSafepoint;
 typedef WriteCheckpointEvent<StringPool> WriteStringPool;
 typedef WriteCheckpointEvent<StringPoolSafepoint> WriteStringPoolSafepoint;
 
 static u4 flush_stringpool(JfrStringPool& string_pool, JfrChunkWriter& chunkwriter) {
   StringPool sp(string_pool);
   WriteStringPool wsp(chunkwriter, sp, TYPE_STRING);
-  return invoke_with_flush_event(wsp);
+  return invoke(wsp);
 }
 
 static u4 write_stringpool(JfrStringPool& string_pool, JfrChunkWriter& chunkwriter) {
@@ -291,20 +273,19 @@
   return invoke(wsps);
 }
 
-typedef Content<EventFlushTypeSet, JfrCheckpointManager, &JfrCheckpointManager::flush_type_set> FlushTypeSetFunctor;
+typedef Content<JfrCheckpointManager, &JfrCheckpointManager::flush_type_set> FlushTypeSetFunctor;
 typedef WriteContent<FlushTypeSetFunctor> FlushTypeSet;
 
 static u4 flush_typeset(JfrCheckpointManager& checkpoint_manager, JfrChunkWriter& chunkwriter) {
   FlushTypeSetFunctor flush_type_set(checkpoint_manager);
   FlushTypeSet fts(chunkwriter, flush_type_set);
-  return invoke_with_flush_event(fts);
+  return invoke(fts);
 }
 
 class MetadataEvent : public StackObj {
  private:
   JfrChunkWriter& _cw;
  public:
-  typedef EventFlushMetadata EventType;
   MetadataEvent(JfrChunkWriter& cw) : _cw(cw) {}
   bool process() {
     JfrMetadataEvent::write(_cw);
@@ -319,7 +300,7 @@
   assert(chunkwriter.is_valid(), "invariant");
   MetadataEvent me(chunkwriter);
   WriteMetadata wm(chunkwriter, me);
-  return invoke_with_flush_event(wm);
+  return invoke(wm);
 }
 
 static u4 write_metadata(JfrChunkWriter& chunkwriter) {
@@ -651,7 +632,7 @@
   return total_elements;
 }
 
-typedef Content<EventFlush, JfrRecorderService, &JfrRecorderService::flush> FlushFunctor;
+typedef Content<JfrRecorderService, &JfrRecorderService::flush> FlushFunctor;
 typedef WriteContent<FlushFunctor> Flush;
 
 void JfrRecorderService::invoke_flush() {
@@ -671,7 +652,9 @@
 
 void JfrRecorderService::flushpoint() {
   MutexLocker lock(JfrStream_lock, Mutex::_no_safepoint_check_flag);
-  invoke_flush();
+  if (_chunkwriter.is_valid()) {
+    invoke_flush();
+  }
 }
 
 void JfrRecorderService::process_full_buffers() {
--- a/src/hotspot/share/opto/cfgnode.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/cfgnode.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1449,10 +1449,7 @@
   } else return NULL;
 
   // Build int->bool conversion
-  Node *in1 = cmp->in(1);
-  BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
-  in1 = bs->step_over_gc_barrier(in1);
-  Node *n = new Conv2BNode(in1);
+  Node *n = new Conv2BNode(cmp->in(1));
   if( flipped )
     n = new XorINode( phase->transform(n), phase->intcon(1) );
 
--- a/src/hotspot/share/opto/loopnode.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/loopnode.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -2505,13 +2505,14 @@
 
     for (uint k = 0; k < outcnt; k++) {
       Node* out = node->raw_out(k);
-
+      if (out == NULL) continue;
       if (out->is_CFG()) {
         if (!is_member(_phase->get_loop(out))) {
           ctrl_edge_out_cnt++;
         }
-      } else {
+      } else if (_phase->has_ctrl(out)) {
         Node* ctrl = _phase->get_ctrl(out);
+        assert(ctrl != NULL, "must be");
         assert(ctrl->is_CFG(), "must be");
         if (!is_member(_phase->get_loop(ctrl))) {
           data_edge_out_cnt++;
--- a/src/hotspot/share/opto/matcher.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/matcher.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -2525,14 +2525,17 @@
 //----------------------------------------------------------------------
 
 // Convert (leg)Vec to (leg)Vec[SDXYZ].
-MachOper* Matcher::specialize_vector_operand_helper(MachNode* m, MachOper* original_opnd) {
-  const Type* t = m->bottom_type();
+MachOper* Matcher::specialize_vector_operand_helper(MachNode* m, uint opnd_idx, const Type* t) {
+  MachOper* original_opnd = m->_opnds[opnd_idx];
   uint ideal_reg = t->ideal_reg();
-  // Handle special cases
+  // Handle special cases.
   if (t->isa_vect()) {
-    // RShiftCntV/RShiftCntV report wide vector type, but VecS as ideal register (see vectornode.hpp).
-    if (m->ideal_Opcode() == Op_RShiftCntV || m->ideal_Opcode() == Op_LShiftCntV) {
-      ideal_reg = TypeVect::VECTS->ideal_reg(); // ideal_reg == Op_VecS
+    // LShiftCntV/RShiftCntV report wide vector type, but Matcher::vector_shift_count_ideal_reg() as ideal register (see vectornode.hpp).
+    // Look for shift count use sites as well (at vector shift nodes).
+    int opc = m->ideal_Opcode();
+    if ((VectorNode::is_shift_count(opc)  && opnd_idx == 0) || // DEF operand of LShiftCntV/RShiftCntV
+        (VectorNode::is_vector_shift(opc) && opnd_idx == 2)) { // shift operand of a vector shift node
+      ideal_reg = Matcher::vector_shift_count_ideal_reg(t->is_vect()->length_in_bytes());
     }
   } else {
     // Chain instructions which convert scalar to vector (e.g., vshiftcntimm on x86) don't have vector type.
@@ -2556,22 +2559,23 @@
 }
 
 // Compute concrete vector operand for a generic DEF/USE vector operand (of mach node m at index idx).
-MachOper* Matcher::specialize_vector_operand(MachNode* m, uint idx) {
-  assert(Matcher::is_generic_vector(m->_opnds[idx]), "repeated updates");
-  if (idx == 0) { // DEF
-    // Use mach node itself to compute vector operand type.
-    return specialize_vector_operand_helper(m, m->_opnds[0]);
+MachOper* Matcher::specialize_vector_operand(MachNode* m, uint opnd_idx) {
+  assert(Matcher::is_generic_vector(m->_opnds[opnd_idx]), "repeated updates");
+  Node* def = NULL;
+  if (opnd_idx == 0) { // DEF
+    def = m; // use mach node itself to compute vector operand type
   } else {
-    // Use def node to compute operand type.
-    int base_idx = m->operand_index(idx);
-    MachNode* in = m->in(base_idx)->as_Mach();
-    if (in->is_MachTemp() && Matcher::is_generic_vector(in->_opnds[0])) {
-      specialize_temp_node(in->as_MachTemp(), m, base_idx); // MachTemp node use site
-    } else if (is_generic_reg2reg_move(in)) {
-      in = in->in(1)->as_Mach(); // skip over generic reg-to-reg moves
+    int base_idx = m->operand_index(opnd_idx);
+    def = m->in(base_idx);
+    if (def->is_Mach()) {
+      if (def->is_MachTemp() && Matcher::is_generic_vector(def->as_Mach()->_opnds[0])) {
+        specialize_temp_node(def->as_MachTemp(), m, base_idx); // MachTemp node use site
+      } else if (is_generic_reg2reg_move(def->as_Mach())) {
+        def = def->in(1); // skip over generic reg-to-reg moves
+      }
     }
-    return specialize_vector_operand_helper(in, m->_opnds[idx]);
   }
+  return specialize_vector_operand_helper(m, opnd_idx, def->bottom_type());
 }
 
 void Matcher::specialize_mach_node(MachNode* m) {
--- a/src/hotspot/share/opto/matcher.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/matcher.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -516,8 +516,8 @@
   void specialize_generic_vector_operands();
   void specialize_mach_node(MachNode* m);
   void specialize_temp_node(MachTempNode* tmp, MachNode* use, uint idx);
-  MachOper* specialize_vector_operand(MachNode* m, uint idx);
-  MachOper* specialize_vector_operand_helper(MachNode* m, MachOper* generic_opnd);
+  MachOper* specialize_vector_operand(MachNode* m, uint opnd_idx);
+  MachOper* specialize_vector_operand_helper(MachNode* m, uint opnd_idx, const Type* t);
 
   static MachOper* specialize_generic_vector_operand(MachOper* generic_opnd, uint ideal_reg, bool is_temp);
 
--- a/src/hotspot/share/opto/memnode.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/memnode.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -4170,7 +4170,7 @@
 Node* InitializeNode::complete_stores(Node* rawctl, Node* rawmem, Node* rawptr,
                                       intptr_t header_size,
                                       Node* size_in_bytes,
-                                      PhaseGVN* phase) {
+                                      PhaseIterGVN* phase) {
   assert(!is_complete(), "not already complete");
   assert(stores_are_sane(phase), "");
   assert(allocation() != NULL, "must be present");
@@ -4262,7 +4262,7 @@
     }
 
     // Collect the store and move on:
-    st->set_req(MemNode::Memory, inits);
+    phase->replace_input_of(st, MemNode::Memory, inits);
     inits = st;                 // put it on the linearized chain
     set_req(i, zmem);           // unhook from previous position
 
--- a/src/hotspot/share/opto/memnode.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/memnode.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1402,7 +1402,7 @@
   // Called when the associated AllocateNode is expanded into CFG.
   Node* complete_stores(Node* rawctl, Node* rawmem, Node* rawptr,
                         intptr_t header_size, Node* size_in_bytes,
-                        PhaseGVN* phase);
+                        PhaseIterGVN* phase);
 
  private:
   void remove_extra_zeroes();
--- a/src/hotspot/share/opto/parse2.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/parse2.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -1048,11 +1048,11 @@
       // if there is a higher range, test for it and process it:
       if (mid < hi && !eq_test_only) {
         // two comparisons of same values--should enable 1 test for 2 branches
-        // Use BoolTest::le instead of BoolTest::gt
+        // Use BoolTest::lt instead of BoolTest::gt
         float cnt = sum_of_cnts(lo, mid-1);
-        IfNode *iff_le  = jump_if_fork_int(key_val, test_val, BoolTest::le, if_prob(cnt, total_cnt), if_cnt(cnt));
-        Node   *iftrue  = _gvn.transform( new IfTrueNode(iff_le) );
-        Node   *iffalse = _gvn.transform( new IfFalseNode(iff_le) );
+        IfNode *iff_lt  = jump_if_fork_int(key_val, test_val, BoolTest::lt, if_prob(cnt, total_cnt), if_cnt(cnt));
+        Node   *iftrue  = _gvn.transform( new IfTrueNode(iff_lt) );
+        Node   *iffalse = _gvn.transform( new IfFalseNode(iff_lt) );
         { PreserveJVMState pjvms(this);
           set_control(iffalse);
           jump_switch_ranges(key_val, mid+1, hi, switch_depth+1);
--- a/src/hotspot/share/opto/vectornode.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/vectornode.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -485,6 +485,38 @@
   }
 }
 
+bool VectorNode::is_vector_shift(int opc) {
+  assert(opc > _last_machine_leaf && opc < _last_opcode, "invalid opcode");
+  switch (opc) {
+  case Op_LShiftVB:
+  case Op_LShiftVS:
+  case Op_LShiftVI:
+  case Op_LShiftVL:
+  case Op_RShiftVB:
+  case Op_RShiftVS:
+  case Op_RShiftVI:
+  case Op_RShiftVL:
+  case Op_URShiftVB:
+  case Op_URShiftVS:
+  case Op_URShiftVI:
+  case Op_URShiftVL:
+    return true;
+  default:
+    return false;
+  }
+}
+
+bool VectorNode::is_shift_count(int opc) {
+  assert(opc > _last_machine_leaf && opc < _last_opcode, "invalid opcode");
+  switch (opc) {
+  case Op_RShiftCntV:
+  case Op_LShiftCntV:
+    return true;
+  default:
+    return false;
+  }
+}
+
 // Return initial Pack node. Additional operands added with add_opd() calls.
 PackNode* PackNode::make(Node* s, uint vlen, BasicType bt) {
   const TypeVect* vt = TypeVect::make(bt, vlen);
--- a/src/hotspot/share/opto/vectornode.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/opto/vectornode.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -74,6 +74,9 @@
   static bool is_invariant_vector(Node* n);
   // [Start, end) half-open range defining which operands are vectors
   static void vector_operands(Node* n, uint* start, uint* end);
+
+  static bool is_vector_shift(int opc);
+  static bool is_shift_count(int opc);
 };
 
 //===========================Vector=ALU=Operations=============================
--- a/src/hotspot/share/utilities/count_leading_zeros.hpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/hotspot/share/utilities/count_leading_zeros.hpp	Wed Jan 15 01:54:35 2020 +0000
@@ -108,8 +108,8 @@
 
 template <typename T> struct CountLeadingZerosImpl<T, 8> {
   static unsigned doit(T v) {
+#ifdef _LP64
     unsigned long index;
-#ifdef _LP64
     _BitScanReverse64(&index, v);
     return 63u - index;
 #else
--- a/src/java.base/share/classes/java/lang/Class.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/lang/Class.java	Wed Jan 15 01:54:35 2020 +0000
@@ -89,16 +89,15 @@
 import sun.reflect.misc.ReflectUtil;
 
 /**
- * Instances of the class {@code Class} represent classes and interfaces
- * in a running Java application. An enum type is a kind of class and an
- * annotation type is a kind of interface. Every array also
- * belongs to a class that is reflected as a {@code Class} object
- * that is shared by all arrays with the same element type and number
- * of dimensions.  The primitive Java types ({@code boolean},
- * {@code byte}, {@code char}, {@code short},
- * {@code int}, {@code long}, {@code float}, and
- * {@code double}), and the keyword {@code void} are also
- * represented as {@code Class} objects.
+ * Instances of the class {@code Class} represent classes and
+ * interfaces in a running Java application. An enum type and a record
+ * type are kinds of class; an annotation type is a kind of
+ * interface. Every array also belongs to a class that is reflected as
+ * a {@code Class} object that is shared by all arrays with the same
+ * element type and number of dimensions.  The primitive Java types
+ * ({@code boolean}, {@code byte}, {@code char}, {@code short}, {@code
+ * int}, {@code long}, {@code float}, and {@code double}), and the
+ * keyword {@code void} are also represented as {@code Class} objects.
  *
  * <p> {@code Class} has no public constructor. Instead a {@code Class}
  * object is constructed automatically by the Java Virtual Machine
--- a/src/java.base/share/classes/java/lang/annotation/ElementType.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/lang/annotation/ElementType.java	Wed Jan 15 01:54:35 2020 +0000
@@ -71,7 +71,8 @@
  * @jls 4.1 The Kinds of Types and Values
  */
 public enum ElementType {
-    /** Class, interface (including annotation type), or enum declaration */
+    /** Class, interface (including annotation type), enum, or record
+     * declaration */
     TYPE,
 
     /** Field declaration (includes enum constants) */
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1451,7 +1451,7 @@
          * <li>If the new lookup class is in the same module as the old lookup class,
          * the new previous lookup class is the old previous lookup class.
          * <li>If the new lookup class is in a different module from the old lookup class,
-         * the new previous lookup class is the the old lookup class.
+         * the new previous lookup class is the old lookup class.
          *</ul>
          * <p>
          * The resulting lookup's capabilities for loading classes
--- a/src/java.base/share/classes/java/nio/X-Buffer.java.template	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1869,14 +1869,26 @@
 
     /**
      * Returns the memory address, pointing to the byte at the given index,
-     * modulus the given unit size.
+     * modulo the given unit size.
      *
-     * <p> A return value greater than zero indicates the address of the byte at
-     * the index is misaligned for the unit size, and the value's quantity
-     * indicates how much the index should be rounded up or down to locate a
-     * byte at an aligned address.  Otherwise, a value of {@code 0} indicates
-     * that the address of the byte at the index is aligned for the unit size.
-     *
+     * <p> The return value is non-negative, with {@code 0} indicating that the
+     * address of the byte at the index is aligned for the unit size, and a
+     * positive value that the address is misaligned for the unit size.  If the
+     * address of the byte at the index is misaligned, the return value
+     * represents how much the index should be adjusted to locate a byte at an
+     * aligned address.  Specifically, the index should either be decremented by
+     * the return value, or incremented by the unit size minus the return value.
+     * Therefore given
+     * <blockquote><pre>
+     * int value = alignmentOffset(index, unitSize)</pre></blockquote>
+     * then the identities
+     * <blockquote><pre>
+     * alignmentOffset(index - value, unitSize) == 0</pre></blockquote>
+     * and
+     * <blockquote><pre>
+     * alignmentOffset(index + (unitSize - value), unitSize) == 0</pre></blockquote>
+     * must hold.
+     * 
      * @apiNote
      * This method may be utilized to determine if unit size bytes from an
      * index can be accessed atomically, if supported by the native platform.
@@ -1892,7 +1904,7 @@
      * @param  unitSize
      *         The unit size in bytes, must be a power of {@code 2}
      *
-     * @return  The indexed byte's memory address modulus the unit size
+     * @return  The indexed byte's memory address modulo the unit size
      *
      * @throws IllegalArgumentException
      *         If the index is negative or the unit size is not a power of
@@ -1918,7 +1930,7 @@
         if (unitSize > 8 && !isDirect())
             throw new UnsupportedOperationException("Unit size unsupported for non-direct buffers: " + unitSize);
 
-        return (int) ((address + index) % unitSize);
+        return (int) ((address + index) & (unitSize - 1));
     }
 
     /**
--- a/src/java.base/share/classes/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,7 +69,7 @@
     * @param publicExponent  the public exponent e
     * @param privateExponent the private exponent d
     * @param primeP          the prime factor p of n
-    * @param primeQ          the prime factor q of q
+    * @param primeQ          the prime factor q of n
     * @param primeExponentP  this is d mod (p-1)
     * @param primeExponentQ  this is d mod (q-1)
     * @param crtCoefficient  the Chinese Remainder Theorem
--- a/src/java.base/share/classes/java/util/ArrayList.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/java/util/ArrayList.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1133,7 +1133,7 @@
             this.parent = parent;
             this.offset = parent.offset + fromIndex;
             this.size = toIndex - fromIndex;
-            this.modCount = root.modCount;
+            this.modCount = parent.modCount;
         }
 
         public E set(int index, E element) {
@@ -1286,7 +1286,7 @@
             return new ListIterator<E>() {
                 int cursor = index;
                 int lastRet = -1;
-                int expectedModCount = root.modCount;
+                int expectedModCount = SubList.this.modCount;
 
                 public boolean hasNext() {
                     return cursor != SubList.this.size;
@@ -1330,7 +1330,7 @@
                         final Object[] es = root.elementData;
                         if (offset + i >= es.length)
                             throw new ConcurrentModificationException();
-                        for (; i < size && modCount == expectedModCount; i++)
+                        for (; i < size && root.modCount == expectedModCount; i++)
                             action.accept(elementAt(es, offset + i));
                         // update once at end to reduce heap write traffic
                         cursor = i;
@@ -1356,7 +1356,7 @@
                         SubList.this.remove(lastRet);
                         cursor = lastRet;
                         lastRet = -1;
-                        expectedModCount = root.modCount;
+                        expectedModCount = SubList.this.modCount;
                     } catch (IndexOutOfBoundsException ex) {
                         throw new ConcurrentModificationException();
                     }
@@ -1382,7 +1382,7 @@
                         SubList.this.add(i, e);
                         cursor = i + 1;
                         lastRet = -1;
-                        expectedModCount = root.modCount;
+                        expectedModCount = SubList.this.modCount;
                     } catch (IndexOutOfBoundsException ex) {
                         throw new ConcurrentModificationException();
                     }
--- a/src/java.base/share/classes/jdk/internal/misc/ExtendedMapMode.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/jdk/internal/misc/ExtendedMapMode.java	Wed Jan 15 01:54:35 2020 +0000
@@ -27,8 +27,11 @@
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.invoke.MethodType;
 import java.nio.channels.FileChannel.MapMode;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
 
 /**
  * JDK-specific map modes implemented in java.base.
@@ -36,10 +39,11 @@
 public class ExtendedMapMode {
 
     static final MethodHandle MAP_MODE_CONSTRUCTOR;
-
     static {
         try {
-            var lookup = MethodHandles.privateLookupIn(MapMode.class, MethodHandles.lookup());
+            PrivilegedExceptionAction<Lookup> pae = () ->
+                MethodHandles.privateLookupIn(MapMode.class, MethodHandles.lookup());
+            Lookup lookup = AccessController.doPrivileged(pae);
             var methodType = MethodType.methodType(void.class, String.class);
             MAP_MODE_CONSTRUCTOR = lookup.findConstructor(MapMode.class, methodType);
         } catch (Exception e) {
--- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,6 +49,7 @@
 import jdk.internal.access.SharedSecrets;
 import jdk.internal.misc.ExtendedMapMode;
 import jdk.internal.misc.Unsafe;
+import jdk.internal.misc.VM;
 import jdk.internal.ref.Cleaner;
 import jdk.internal.ref.CleanerFactory;
 
@@ -1116,8 +1117,11 @@
     }
 
     private boolean isSync(MapMode mode) {
-        return mode == ExtendedMapMode.READ_ONLY_SYNC ||
-                mode == ExtendedMapMode.READ_WRITE_SYNC;
+        // Do not want to initialize ExtendedMapMode until
+        // after the module system has been initialized
+        return !VM.isModuleSystemInited() ? false :
+            (mode == ExtendedMapMode.READ_ONLY_SYNC ||
+                mode == ExtendedMapMode.READ_WRITE_SYNC);
     }
 
     private int toProt(MapMode mode) {
--- a/src/java.base/share/classes/sun/security/ssl/ServerHello.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/sun/security/ssl/ServerHello.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,11 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.security.AlgorithmConstraints;
+import java.security.CryptoPrimitive;
 import java.security.GeneralSecurityException;
 import java.text.MessageFormat;
 import java.util.Arrays;
+import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
@@ -434,7 +436,7 @@
                     continue;
                 }
                 if (!ServerHandshakeContext.legacyAlgorithmConstraints.permits(
-                        null, cs.name, null)) {
+                        EnumSet.of(CryptoPrimitive.KEY_AGREEMENT), cs.name, null)) {
                     legacySuites.add(cs);
                     continue;
                 }
@@ -723,7 +725,9 @@
                 }
 
                 if ((legacySuite == null) &&
-                        !legacyConstraints.permits(null, cs.name, null)) {
+                        !legacyConstraints.permits(
+                                EnumSet.of(CryptoPrimitive.KEY_AGREEMENT),
+                                cs.name, null)) {
                     legacySuite = cs;
                     continue;
                 }
--- a/src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -128,6 +128,11 @@
     @Override
     public final boolean permits(Set<CryptoPrimitive> primitives,
             String algorithm, AlgorithmParameters parameters) {
+        if (primitives == null || primitives.isEmpty()) {
+            throw new IllegalArgumentException("The primitives cannot be null" +
+                    " or empty.");
+        }
+
         if (!checkAlgorithm(disabledAlgorithms, algorithm, decomposer)) {
             return false;
         }
@@ -216,7 +221,11 @@
     private boolean checkConstraints(Set<CryptoPrimitive> primitives,
             String algorithm, Key key, AlgorithmParameters parameters) {
 
-        // check the key parameter, it cannot be null.
+        if (primitives == null || primitives.isEmpty()) {
+            throw new IllegalArgumentException("The primitives cannot be null" +
+                    " or empty.");
+        }
+
         if (key == null) {
             throw new IllegalArgumentException("The key cannot be null");
         }
--- a/src/java.base/share/classes/sun/security/util/LegacyAlgorithmConstraints.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/classes/sun/security/util/LegacyAlgorithmConstraints.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,17 +51,29 @@
     @Override
     public final boolean permits(Set<CryptoPrimitive> primitives,
             String algorithm, AlgorithmParameters parameters) {
+        if (primitives == null || primitives.isEmpty()) {
+            throw new IllegalArgumentException("The primitives cannot be null" +
+                    " or empty.");
+        }
         return checkAlgorithm(legacyAlgorithms, algorithm, decomposer);
     }
 
     @Override
     public final boolean permits(Set<CryptoPrimitive> primitives, Key key) {
+         if (primitives == null || primitives.isEmpty()) {
+            throw new IllegalArgumentException("The primitives cannot be null" +
+            " or empty.");
+        }
         return true;
     }
 
     @Override
     public final boolean permits(Set<CryptoPrimitive> primitives,
             String algorithm, Key key, AlgorithmParameters parameters) {
+        if (primitives == null || primitives.isEmpty()) {
+            throw new IllegalArgumentException("The primitives cannot be null" +
+                    " or empty.");
+        }
         return checkAlgorithm(legacyAlgorithms, algorithm, decomposer);
     }
 
--- a/src/java.base/share/man/java.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/man/java.1	Wed Jan 15 01:54:35 2020 +0000
@@ -8,7 +8,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -22,7 +22,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAVA" "1" "2019" "JDK 13" "JDK Commands"
+.TH "JAVA" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -181,8 +181,8 @@
 You\[aq]ll get an error message if you use a value of \f[I]N\f[R] that is
 no longer supported.
 Supported values of \f[I]N\f[R] for this release are \f[CB]7\f[R],
-\f[CB]8\f[R], \f[CB]9\f[R], \f[CB]10\f[R], \f[CB]11\f[R], \f[CB]12\f[R], and
-\f[CB]13\f[R].
+\f[CB]8\f[R], \f[CB]9\f[R], \f[CB]10\f[R], \f[CB]11\f[R], \f[CB]12\f[R],
+\f[CB]13\f[R], and \f[CB]14\f[R].
 .RE
 .PP
 If the file does not have the \f[CB]\&.java\f[R] extension, the
@@ -267,7 +267,7 @@
 of which is taken as the class to be executed.
 .IP \[bu] 2
 The compiler does not enforce the optional restriction defined at the
-end of JLS §7.6, that a type in a named package should exist in a file
+end of JLS ??7.6, that a type in a named package should exist in a file
 whose name is composed from the type name followed by the
 \f[CB]\&.java\f[R] extension.
 .IP \[bu] 2
@@ -315,7 +315,7 @@
 same manner as that specified in the command line.
 .PP
 Single (\f[CB]\[aq]\f[R]) or double (\f[CB]"\f[R]) quotes can be used to
-enclose arguments that\ contain whitespace characters.
+enclose arguments that contain whitespace characters.
 All content between the open quote and the first matching close quote
 are preserved by simply removing the pair of quotes.
 In case a matching quote is not found, the launcher will abort with an
@@ -802,20 +802,6 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-Xcomp\f[R]
-Forces compilation of methods on first invocation.
-By default, the Client VM (\f[CB]\-client\f[R]) performs 1,000 interpreted
-method invocations and the Server VM (\f[CB]\-server\f[R]) performs 10,000
-interpreted method invocations to gather information for efficient
-compilation.
-Specifying the \f[CB]\-Xcomp\f[R] option disables interpreted method
-invocations to increase compilation performance at the expense of
-efficiency.
-You can also change the number of interpreted method invocations before
-compilation using the \f[CB]\-XX:CompileThreshold\f[R] option.
-.RS
-.RE
-.TP
 .B \f[CB]\-Xdebug\f[R]
 Does nothing.
 Provided for backward compatibility.
@@ -852,6 +838,8 @@
 .B \f[CB]\-Xmixed\f[R]
 Executes all bytecode by the interpreter except for hot methods, which
 are compiled to native code.
+On by default.
+Use \f[CB]\-Xint\f[R] to switch off.
 .RS
 .RE
 .TP
@@ -1643,7 +1631,7 @@
 (\f[CB]\-XX:\-PreserveFramePointer\f[R]) and using the RBP register to
 hold the frame pointer of the currently executing method
 (\f[CB]\-XX:+PreserveFramePointer\f[R] .
-If the frame pointer is available, then external profiling tools\ (for
+If the frame pointer is available, then external profiling tools (for
 example, Linux perf) can construct more accurate stack traces.
 .RS
 .RE
@@ -1694,6 +1682,19 @@
 See \f[B]Application Class Data Sharing\f[R].
 .RE
 .TP
+.B \f[CB]\-XX:+ShowCodeDetailsInExceptionMessages\f[R]
+Enables printing of improved \f[CB]NullPointerException\f[R] messages.
+When an application throws a \f[CB]NullPointerException\f[R], the option
+enables the JVM to analyze the program\[aq]s bytecode instructions to
+determine precisely which reference is \f[CB]null\f[R], and describes the
+source with a null\-detail message.
+The null\-detail message is calculated and returned by
+\f[CB]NullPointerException.getMessage()\f[R], and will be printed as the
+exception message along with the method, filename, and line number.
+By default, this option is disabled.
+.RS
+.RE
+.TP
 .B \f[CB]\-XX:+ShowMessageBoxOnError\f[R]
 Enables the display of a dialog box when the JVM experiences an
 irrecoverable error.
@@ -1830,7 +1831,7 @@
 Sets the Java thread stack size (in kilobytes).
 Use of a scaling suffix, such as \f[CB]k\f[R], results in the scaling of
 the kilobytes value so that \f[CB]\-XX:ThreadStackSize=1k\f[R] sets the
-Java thread stack size\ to 1024*1024 bytes or 1 megabyte.
+Java thread stack size to 1024*1024 bytes or 1 megabyte.
 The default value depends on the platform:
 .RS
 .IP \[bu] 2
@@ -1892,9 +1893,9 @@
 are available to a Java process running in docker containers.
 It uses this information to allocate system resources.
 This support is only available on Linux x64 platforms.
-\ If supported, the default for this flag is\ \f[CB]true\f[R], and
-container support is enabled by default.
-\ It\ can be disabled with\ \f[CB]\-XX:\-UseContainerSupport\f[R].
+If supported, the default for this flag is \f[CB]true\f[R], and container
+support is enabled by default.
+It can be disabled with \f[CB]\-XX:\-UseContainerSupport\f[R].
 .RS
 .PP
 Unified Logging is available to help to diagnose issues related to this
@@ -1964,8 +1965,6 @@
 .PP
 \f[CB]\-XX:AllocateInstancePrefetchLines=1\f[R]
 .RE
-.PP
-Only the Java HotSpot Server VM supports this option.
 .RE
 .TP
 .B \f[CB]\-XX:AllocatePrefetchDistance=\f[R]\f[I]size\f[R]
@@ -1990,14 +1989,11 @@
 .PP
 \f[CB]\-XX:AllocatePrefetchDistance=1024\f[R]
 .RE
-.PP
-Only the Java HotSpot Server VM supports this option.
 .RE
 .TP
 .B \f[CB]\-XX:AllocatePrefetchInstr=\f[R]\f[I]instruction\f[R]
 Sets the prefetch instruction to prefetch ahead of the allocation
 pointer.
-Only the Java HotSpot Server VM supports this option.
 Possible values are from 0 to 3.
 The actual instructions behind the values depend on the platform.
 By default, the prefetch instruction is set to 0:
@@ -2006,8 +2002,6 @@
 .PP
 \f[CB]\-XX:AllocatePrefetchInstr=0\f[R]
 .RE
-.PP
-Only the Java HotSpot Server VM supports this option.
 .RE
 .TP
 .B \f[CB]\-XX:AllocatePrefetchLines=\f[R]\f[I]lines\f[R]
@@ -2023,8 +2017,6 @@
 .PP
 \f[CB]\-XX:AllocatePrefetchLines=5\f[R]
 .RE
-.PP
-Only the Java HotSpot Server VM supports this option.
 .RE
 .TP
 .B \f[CB]\-XX:AllocatePrefetchStepSize=\f[R]\f[I]size\f[R]
@@ -2038,8 +2030,6 @@
 .PP
 \f[CB]\-XX:AllocatePrefetchStepSize=16\f[R]
 .RE
-.PP
-Only the Java HotSpot Server VM supports this option.
 .RE
 .TP
 .B \f[CB]\-XX:AllocatePrefetchStyle=\f[R]\f[I]style\f[R]
@@ -2054,7 +2044,7 @@
 .TP
 .B \f[CB]1\f[R]
 Execute prefetch instructions after each allocation.
-This is the default parameter.
+This is the default setting.
 .RS
 .RE
 .TP
@@ -2065,11 +2055,9 @@
 .RE
 .TP
 .B \f[CB]3\f[R]
-Use BIS instruction on SPARC for allocation prefetch.
-.RS
-.RE
-.PP
-Only the Java HotSpot Server VM supports this option.
+Generate one prefetch instruction per cache line.
+.RS
+.RE
 .RE
 .TP
 .B \f[CB]\-XX:+BackgroundCompilation\f[R]
@@ -2083,9 +2071,8 @@
 .TP
 .B \f[CB]\-XX:CICompilerCount=\f[R]\f[I]threads\f[R]
 Sets the number of compiler threads to use for compilation.
-By default, the number of threads is set to 2 for the server JVM, to 1
-for the client JVM, and it scales to the number of cores if tiered
-compilation is used.
+By default, the number of compiler threads is selected automatically
+depending on the number of CPUs and memory available for compiled code.
 The following example shows how to set the number of threads to 2:
 .RS
 .RS
@@ -2094,6 +2081,13 @@
 .RE
 .RE
 .TP
+.B \f[CB]\-XX:+UseDynamicNumberOfCompilerThreads\f[R]
+Dynamically create compiler thread up to the limit specified by
+\f[CB]\-XX:CICompilerCount\f[R].
+This option is enabled by default.
+.RS
+.RE
+.TP
 .B \f[CB]\-XX:CompileCommand=\f[R]\f[I]command\f[R]\f[CB],\f[R]\f[I]method\f[R][\f[CB],\f[R]\f[I]option\f[R]]
 Specifies a \f[I]command\f[R] to perform on a \f[I]method\f[R].
 For example, to exclude the \f[CB]indexOf()\f[R] method of the
@@ -2318,33 +2312,13 @@
 .fi
 .RE
 .TP
-.B \f[CB]\-XX:CompileThreshold=\f[R]\f[I]invocations\f[R]
-Sets the number of interpreted method invocations before compilation.
-By default, in the server JVM, the JIT compiler performs 10,000
-interpreted method invocations to gather information for efficient
-compilation.
-For the client JVM, the default setting is 1,500 invocations.
-This option is ignored when tiered compilation is enabled; see the
-option \f[CB]\-XX:\-TieredCompilation\f[R].
-The following example shows how to set the number of interpreted method
-invocations to 5,000:
-.RS
-.RS
-.PP
-\f[CB]\-XX:CompileThreshold=5000\f[R]
-.RE
-.PP
-You can completely disable interpretation of Java methods before
-compilation by specifying the \f[CB]\-Xcomp\f[R] option.
-.RE
-.TP
 .B \f[CB]\-XX:CompileThresholdScaling=\f[R]\f[I]scale\f[R]
 Provides unified control of first compilation.
 This option controls when methods are first compiled for both the tiered
 and the nontiered modes of operation.
-The \f[CB]CompileThresholdScaling\f[R] option has an integer value between
-0 and +Inf and scales the thresholds corresponding to the current mode
-of operation (both tiered and nontiered).
+The \f[CB]CompileThresholdScaling\f[R] option has a floating point value
+between 0 and +Inf and scales the thresholds corresponding to the
+current mode of operation (both tiered and nontiered).
 Setting \f[CB]CompileThresholdScaling\f[R] to a value less than 1.0
 results in earlier compilation while values greater than 1.0 delay
 compilation.
@@ -2358,7 +2332,6 @@
 This option is enabled by default.
 To disable the use of escape analysis, specify
 \f[CB]\-XX:\-DoEscapeAnalysis\f[R].
-Only the Java HotSpot Server VM supports this option.
 .RS
 .RE
 .TP
@@ -2367,7 +2340,7 @@
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
 \f[CB]G\f[R] to indicate gigabytes.
-The default value is set to 500 KB.
+The default value depends on the platform.
 The initial code cache size shouldn\[aq]t be less than the system\[aq]s
 minimal memory page size.
 The following example shows how to set the initial code cache size to 32
@@ -2387,14 +2360,14 @@
 .RE
 .TP
 .B \f[CB]\-XX:InlineSmallCode=\f[R]\f[I]size\f[R]
-Sets the maximum code size (in bytes) for compiled methods that should
-be inlined.
+Sets the maximum code size (in bytes) for already compiled methods that
+may be inlined.
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
 \f[CB]G\f[R] to indicate gigabytes.
-Only compiled methods with the size smaller than the specified size is
-inlined.
-By default, the maximum code size is set to 1000 bytes:
+The default value depends on the platform and on whether tiered
+compilation is enabled.
+In the following example it is set to 1000 bytes:
 .RS
 .RS
 .PP
@@ -2420,8 +2393,23 @@
 \f[CB]\-XX:+PrintCompilation\f[R] option.
 .RE
 .TP
+.B \f[CB]\-XX:FreqInlineSize=\f[R]\f[I]size\f[R]
+Sets the maximum bytecode size (in bytes) of a hot method to be inlined.
+Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
+\f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
+\f[CB]G\f[R] to indicate gigabytes.
+The default value depends on the platform.
+In the following example it is set to 325 bytes:
+.RS
+.RS
+.PP
+\f[CB]\-XX:FreqInlineSize=325\f[R]
+.RE
+.RE
+.TP
 .B \f[CB]\-XX:MaxInlineSize=\f[R]\f[I]size\f[R]
-Sets the maximum bytecode size (in bytes) of a method to be inlined.
+Sets the maximum bytecode size (in bytes) of a cold method to be
+inlined.
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
 \f[CB]G\f[R] to indicate gigabytes.
@@ -2433,34 +2421,6 @@
 .RE
 .RE
 .TP
-.B \f[CB]\-XX:MaxNodeLimit=\f[R]\f[I]nodes\f[R]
-Sets the maximum number of nodes to be used during single method
-compilation.
-By default, the maximum number of nodes is set to 65,000:
-.RS
-.RS
-.PP
-\f[CB]\-XX:MaxNodeLimit=65000\f[R]
-.RE
-.RE
-.TP
-.B \f[CB]\-XX:NonNMethodCodeHeapSize=\f[R]\f[I]size\f[R]
-Sets the size in bytes of the code segment containing nonmethod code.
-.RS
-.PP
-A nonmethod code segment containing nonmethod code, such as compiler
-buffers and the bytecode interpreter.
-This code type stays in the code cache forever.
-This flag is used only if \f[CB]\-XX:SegmentedCodeCache\f[R] is enabled.
-.RE
-.TP
-.B \f[CB]\-XX:NonProfiledCodeHeapSize=\f[R]\f[I]size\f[R]
-Sets the size in bytes of the code segment containing nonprofiled
-methods.
-This flag is used only if \f[CB]\-XX:SegmentedCodeCache\f[R] is enabled.
-.RS
-.RE
-.TP
 .B \f[CB]\-XX:MaxTrivialSize=\f[R]\f[I]size\f[R]
 Sets the maximum bytecode size (in bytes) of a trivial method to be
 inlined.
@@ -2476,12 +2436,40 @@
 .RE
 .RE
 .TP
+.B \f[CB]\-XX:MaxNodeLimit=\f[R]\f[I]nodes\f[R]
+Sets the maximum number of nodes to be used during single method
+compilation.
+By default the value depends on the features enabled.
+In the following example the maximum number of nodes is set to 100,000:
+.RS
+.RS
+.PP
+\f[CB]\-XX:MaxNodeLimit=100000\f[R]
+.RE
+.RE
+.TP
+.B \f[CB]\-XX:NonNMethodCodeHeapSize=\f[R]\f[I]size\f[R]
+Sets the size in bytes of the code segment containing nonmethod code.
+.RS
+.PP
+A nonmethod code segment containing nonmethod code, such as compiler
+buffers and the bytecode interpreter.
+This code type stays in the code cache forever.
+This flag is used only if \f[CB]\-XX:SegmentedCodeCache\f[R] is enabled.
+.RE
+.TP
+.B \f[CB]\-XX:NonProfiledCodeHeapSize=\f[R]\f[I]size\f[R]
+Sets the size in bytes of the code segment containing nonprofiled
+methods.
+This flag is used only if \f[CB]\-XX:SegmentedCodeCache\f[R] is enabled.
+.RS
+.RE
+.TP
 .B \f[CB]\-XX:+OptimizeStringConcat\f[R]
 Enables the optimization of \f[CB]String\f[R] concatenation operations.
 This option is enabled by default.
 To disable the optimization of \f[CB]String\f[R] concatenation operations,
 specify \f[CB]\-XX:\-OptimizeStringConcat\f[R].
-Only the Java HotSpot Server VM supports this option.
 .RS
 .RE
 .TP
@@ -2595,15 +2583,25 @@
 .B \f[CB]\-XX:\-TieredCompilation\f[R]
 Disables the use of tiered compilation.
 By default, this option is enabled.
-Only the Java HotSpot Server VM supports this option.
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:UseSSE=\f[R]\f[I]version\f[R]
+Enables the use of SSE instruction set of a specified version.
+Is set by default to the highest supported version available (x86 only).
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:UseAVX=\f[R]\f[I]version\f[R]
+Enables the use of AVX instruction set of a specified version.
+Is set by default to the highest supported version available (x86 only).
 .RS
 .RE
 .TP
 .B \f[CB]\-XX:+UseAES\f[R]
-Enables hardware\-based AES intrinsics for Intel, AMD, and SPARC
-hardware.
-Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and
-SPARC (T4 and newer) are the supported hardware.
+Enables hardware\-based AES intrinsics for hardware that supports it.
+This option is on by default on hardware that has the necessary
+instructions.
 The \f[CB]\-XX:+UseAES\f[R] is used in conjunction with UseAESIntrinsics.
 Flags that control intrinsics now require the option
 \f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
@@ -2611,8 +2609,9 @@
 .RE
 .TP
 .B \f[CB]\-XX:+UseAESIntrinsics\f[R]
-Enables \f[CB]\-XX:+UseAES\f[R] and \f[CB]\-XX:+UseAESIntrinsics\f[R] flags
-by default and are supported only for the Java HotSpot Server VM.
+Enables AES intrinsics.
+Specifying\f[CB]\-XX:+UseAESIntrinsics\f[R] is equivalent to also enabling
+\f[CB]\-XX:+UseAES\f[R].
 To disable hardware\-based AES intrinsics, specify
 \f[CB]\-XX:\-UseAES\ \-XX:\-UseAESIntrinsics\f[R].
 For example, to enable hardware AES, use the following flags:
@@ -2624,9 +2623,147 @@
 .PP
 Flags that control intrinsics now require the option
 \f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
-To support UseAES and UseAESIntrinsics flags, use the \f[CB]\-server\f[R]
-option to select the Java HotSpot Server VM.
-These flags aren\[aq]t supported on Client VM.
+.RE
+.TP
+.B \f[CB]\-XX:+UseAESCTRIntrinsics\f[R]
+Analogous to \f[CB]\-XX:+UseAESIntrinsics\f[R] enables AES/CTR intrinsics.
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseGHASHIntrinsics\f[R]
+Controls the use of GHASH intrinsics.
+Enabled by default on platforms that support the corresponding
+instructions.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseBASE64Intrinsics\f[R]
+Controls the use of accelerated BASE64 encoding routines for
+\f[CB]java.util.Base64\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseAdler32Intrinsics\f[R]
+Controls the use of Adler32 checksum algorithm intrinsic for
+\f[CB]java.util.zip.Adler32\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseCRC32Intrinsics\f[R]
+Controls the use of CRC32 intrinsics for \f[CB]java.util.zip.CRC32\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseCRC32CIntrinsics\f[R]
+Controls the use of CRC32C intrinsics for \f[CB]java.util.zip.CRC32C\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseSHA\f[R]
+Enables hardware\-based intrinsics for SHA crypto hash functions for
+SPARC hardware.
+The \f[CB]UseSHA\f[R] option is used in conjunction with the
+\f[CB]UseSHA1Intrinsics\f[R], \f[CB]UseSHA256Intrinsics\f[R], and
+\f[CB]UseSHA512Intrinsics\f[R] options.
+.RS
+.PP
+The \f[CB]UseSHA\f[R] and \f[CB]UseSHA*Intrinsics\f[R] flags are enabled by
+default on machines that support the corresponding instructions.
+.PP
+This feature is applicable only when using the
+\f[CB]sun.security.provider.Sun\f[R] provider for SHA operations.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.PP
+To disable all hardware\-based SHA intrinsics, specify the
+\f[CB]\-XX:\-UseSHA\f[R].
+To disable only a particular SHA intrinsic, use the appropriate
+corresponding option.
+For example: \f[CB]\-XX:\-UseSHA256Intrinsics\f[R].
+.RE
+.TP
+.B \f[CB]\-XX:+UseSHA1Intrinsics\f[R]
+Enables intrinsics for SHA\-1 crypto hash function.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseSHA256Intrinsics\f[R]
+Enables intrinsics for SHA\-224 and SHA\-256 crypto hash functions.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseSHA512Intrinsics\f[R]
+Enables intrinsics for SHA\-384 and SHA\-512 crypto hash functions.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseMathExactIntrinsics\f[R]
+Enables intrinsification of various \f[CB]java.lang.Math.*Exact()\f[R]
+functions.
+Enabled by default.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:+UseMultiplyToLenIntrinsic\f[R]
+Enables intrinsification of \f[CB]BigInteger.multiplyToLen()\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \-XX:+UseSquareToLenIntrinsic
+Enables intrinsification of \f[CB]BigInteger.squareToLen()\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \-XX:+UseMulAddIntrinsic
+Enables intrinsification of \f[CB]BigInteger.mulAdd()\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \-XX:+UseMontgomeryMultiplyIntrinsic
+Enables intrinsification of \f[CB]BigInteger.montgomeryMultiply()\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
+.RE
+.TP
+.B \-XX:+UseMontgomerySquareIntrinsic
+Enables intrinsification of \f[CB]BigInteger.montgomerySquare()\f[R].
+Enabled by default on platforms that support it.
+Flags that control intrinsics now require the option
+\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
+.RS
 .RE
 .TP
 .B \f[CB]\-XX:+UseCMoveUnconditionally\f[R]
@@ -2650,13 +2787,31 @@
 It should be used only on machines with multiple sockets, where it
 increases the performance of Java applications that rely on concurrent
 operations.
-Only the Java HotSpot Server VM supports this option.
 .RS
 .RE
 .TP
 .B \f[CB]\-XX:+UseCountedLoopSafepoints\f[R]
 Keeps safepoints in counted loops.
-Its default value is false.\ 
+Its default value depends on whether the selected garbage collector
+requires low latency safepoints.
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:LoopStripMiningIter=\f[R]\f[I]number_of_iterations\f[R]
+Controls the number of iterations in the inner strip mined loop.
+Strip mining transforms counted loops into two level nested loops.
+Safepoints are kept in the outer loop while the inner loop can execute
+at full speed.
+This option controls the maximum number of iterations in the inner loop.
+The default value is 1,000.
+.RS
+.RE
+.TP
+.B \f[CB]\-XX:LoopStripMiningIterShortLoop\f[R]=\f[I]number_of_iterations\f[R]
+Controls loop strip mining optimization.
+Loops with the number of iterations less than specified will not have
+safepoints in them.
+Default value is 1/10th of \f[CB]\-XX:LoopStripMiningIter\f[R].
 .RS
 .RE
 .TP
@@ -2687,8 +2842,8 @@
 inflated locks, with the normal locking mechanism as the fallback
 handler.
 This option is disabled by default.
-Options related to RTM are available only for the Java HotSpot Server VM
-on x86 CPUs that support Transactional Synchronization Extensions (TSX).
+Options related to RTM are available only on x86 CPUs that support
+Transactional Synchronization Extensions (TSX).
 .RS
 .PP
 RTM is part of Intel\[aq]s TSX, which is an x86 instruction set
@@ -2731,51 +2886,6 @@
 their cache.
 .RE
 .TP
-.B \f[CB]\-XX:+UseSHA\f[R]
-Enables hardware\-based intrinsics for SHA crypto hash functions for
-SPARC hardware.
-The \f[CB]UseSHA\f[R] option is used in conjunction with the
-\f[CB]UseSHA1Intrinsics\f[R], \f[CB]UseSHA256Intrinsics\f[R], and
-\f[CB]UseSHA512Intrinsics\f[R] options.
-.RS
-.PP
-The \f[CB]UseSHA\f[R] and \f[CB]UseSHA*Intrinsics\f[R] flags are enabled by
-default, and are supported only for Java HotSpot Server VM 64\-bit on
-SPARC T4 and newer.
-.PP
-This feature is applicable only when using the
-\f[CB]sun.security.provider.Sun\f[R] provider for SHA operations.
-Flags that control intrinsics now require the option
-\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
-.PP
-To disable all hardware\-based SHA intrinsics, specify the
-\f[CB]\-XX:\-UseSHA\f[R].
-To disable only a particular SHA intrinsic, use the appropriate
-corresponding option.
-For example: \f[CB]\-XX:\-UseSHA256Intrinsics\f[R].
-.RE
-.TP
-.B \f[CB]\-XX:+UseSHA1Intrinsics\f[R]
-Enables intrinsics for SHA\-1 crypto hash function.
-Flags that control intrinsics now require the option
-\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
-.RS
-.RE
-.TP
-.B \f[CB]\-XX:+UseSHA256Intrinsics\f[R]
-Enables intrinsics for SHA\-224 and SHA\-256 crypto hash functions.
-Flags that control intrinsics now require the option
-\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
-.RS
-.RE
-.TP
-.B \f[CB]\-XX:+UseSHA512Intrinsics\f[R]
-Enables intrinsics for SHA\-384 and SHA\-512 crypto hash functions.
-Flags that control intrinsics now require the option
-\f[CB]\-XX:+UnlockDiagnosticVMOptions\f[R].
-.RS
-.RE
-.TP
 .B \f[CB]\-XX:+UseSuperWord\f[R]
 Enables the transformation of scalar operations into superword
 operations.
@@ -2783,7 +2893,6 @@
 This option is enabled by default.
 To disable the transformation of scalar operations into superword
 operations, specify \f[CB]\-XX:\-UseSuperWord\f[R].
-Only the Java HotSpot Server VM supports this option.
 .RS
 .RE
 .SH ADVANCED SERVICEABILITY OPTIONS FOR JAVA
@@ -2975,7 +3084,6 @@
 application uses the heap space.
 .RS
 .RE
-.RE
 .TP
 .B \f[CB]\-XX:ConcGCThreads=\f[R]\f[I]threads\f[R]
 Sets the number of threads used for concurrent GC.
@@ -3707,14 +3815,6 @@
 automatically enabled, unless you explicitly disable it.
 .RE
 .TP
-.B \f[CB]\-XX:+UseParallelOldGC\f[R]
-Enables the use of the parallel garbage collector for full GCs.
-By default, this option is disabled.
-Enabling it automatically enables the \f[CB]\-XX:+UseParallelGC\f[R]
-option.
-.RS
-.RE
-.TP
 .B \f[CB]\-XX:+UseSerialGC\f[R]
 Enables the use of the serial garbage collector.
 This is generally the best choice for small and simple applications that
@@ -3799,15 +3899,6 @@
 \f[CB]\-Xlog:gc:garbage\-collection.log\f[R]
 .RE
 .TP
-.B \f[CB]\-XX:+FailOverToOldVerifier\f[R]
-Enables automatic failover to the old verifier when the new type checker
-fails.
-By default, this option is disabled and it\[aq]s ignored (that is,
-treated as disabled) for classes with a recent bytecode version.
-You can enable it only for classes with older versions of the bytecode.
-.RS
-.RE
-.TP
 .B \f[CB]\-XX:+FlightRecorder\f[R]
 Enables the use of Java Flight Recorder (JFR) during the runtime of the
 application.
@@ -3902,6 +3993,27 @@
 See \f[B]Enable Logging with the JVM Unified Logging Framework\f[R].
 .RE
 .TP
+.B \f[CB]\-XX:+UseParallelOldGC\f[R]
+Enables the use of the parallel garbage collector for full GCs.
+By default, this option is disabled.
+Enabling it automatically enables the \f[CB]\-XX:+UseParallelGC\f[R]
+option.
+.RS
+.RE
+.SH OBSOLETE JAVA OPTIONS
+.PP
+These \f[CB]java\f[R] options are still accepted but ignored, and a
+warning is issued when they\[aq]re used.
+.TP
+.B \f[CB]\-XX:+FailOverToOldVerifier\f[R]
+Enables automatic failover to the old verifier when the new type checker
+fails.
+By default, this option is disabled and it\[aq]s ignored (that is,
+treated as disabled) for classes with a recent bytecode version.
+You can enable it only for classes with older versions of the bytecode.
+.RS
+.RE
+.TP
 .B \f[CB]\-XX:+UseMembar\f[R]
 Enabled issuing membars on thread\-state transitions.
 This option was disabled by default on all platforms except ARM servers,
@@ -3925,23 +4037,14 @@
 .RE
 .SH REMOVED JAVA OPTIONS
 .PP
-These \f[CB]java\f[R] options have been removed in JDK 13 and using them
-results in an error of:
-.RS
-.PP
-\f[CB]Unrecognized\ VM\ option\f[R] \f[I]option\-name\f[R]
-.RE
-.TP
-.B \f[CB]\-XX:+AggressiveOpts\f[R]
-Enabled the use of aggressive performance optimization features.
-By default, this option was disabled and experimental performance
-features were not used.
-.RS
-.RE
+No documented \f[CB]java\f[R] options have been removed in JDK 14.
 .PP
 For the lists and descriptions of options removed in previous releases
 see the \f[I]Removed Java Options\f[R] section in:
 .IP \[bu] 2
+\f[B]Java Platform, Standard Edition Tools Reference, Release 13\f[R]
+[https://docs.oracle.com/en/java/javase/13/docs/specs/man/java.html]
+.IP \[bu] 2
 \f[B]Java Platform, Standard Edition Tools Reference, Release 12\f[R]
 [https://docs.oracle.com/en/java/javase/12/tools/java.html#GUID\-3B1CE181\-CD30\-4178\-9602\-230B800D4FAE]
 .IP \[bu] 2
@@ -4012,7 +4115,6 @@
 A string within quotation marks may contain the characters \f[CB]\\n\f[R],
 \f[CB]\\r\f[R], \f[CB]\\t\f[R], and \f[CB]\\f\f[R].
 They are converted to their respective ASCII codes.
-\ 
 .IP \[bu] 2
 If a file name contains embedded spaces, then put the whole file name in
 double quotation marks.
@@ -4032,11 +4134,11 @@
 Lines may be continued using the continuation character (\f[CB]\\\f[R]) at
 the end\-of\-line.
 The two lines are concatenated with the leading white spaces trimmed.
-To prevent trimming the \ leading white spaces, a continuation character
+To prevent trimming the leading white spaces, a continuation character
 (\f[CB]\\\f[R]) may be placed at the first column.
 .IP \[bu] 2
-Because backslash (\\) is an escape character, a backslash
-character\ must be escaped with another backslash character.
+Because backslash (\\) is an escape character, a backslash character
+must be escaped with another backslash character.
 .IP \[bu] 2
 Partial quote is allowed and is closed by an end\-of\-file.
 .IP \[bu] 2
@@ -4067,7 +4169,7 @@
 .PP
 \f[CB]\-cp\ lib/cool/app/jars\f[R]
 .RE
-.SS Example of a Backslash Character\ Escaped with Another Backslash
+.SS Example of a Backslash Character Escaped with Another Backslash
 Character in an Argument File
 .PP
 To output the following:
@@ -4079,7 +4181,7 @@
 The backslash character must be specified in the argument file as:
 .RS
 .PP
-\f[CB]\-cp\ \ "c:\\\\Program\ Files\ (x86)\\\\Java\\\\jre\\\\lib\\\\ext;c:\\\\Program\ Files\\\\Java\\\\jre9\\\\lib\\\\ext"\f[R]
+\f[CB]\-cp\ "c:\\\\Program\ Files\ (x86)\\\\Java\\\\jre\\\\lib\\\\ext;c:\\\\Program\ Files\\\\Java\\\\jre9\\\\lib\\\\ext"\f[R]
 .RE
 .SS Example of an EOL Escape Used to Force Concatenation of Lines in an
 Argument File
@@ -4105,7 +4207,7 @@
 .nf
 \f[CB]
 \-cp\ "/lib/cool\\
-\\app/jars”
+\\app/jars???
 \f[R]
 .fi
 .PP
@@ -4894,10 +4996,10 @@
 .IP
 .nf
 \f[CB]
-java\ \-XX:AllocatePrefetchStyle=5\ \-version\ \ \ 
-intx\ AllocatePrefetchStyle=5\ is\ outside\ the\ allowed\ range\ [\ 0\ ...\ 3\ ]\ \ \ 
-Improperly\ specified\ VM\ option\ \[aq]AllocatePrefetchStyle=5\[aq]\ \ \ 
-Error:\ Could\ not\ create\ the\ Java\ Virtual\ Machine.\ \ 
+java\ \-XX:AllocatePrefetchStyle=5\ \-version
+intx\ AllocatePrefetchStyle=5\ is\ outside\ the\ allowed\ range\ [\ 0\ ...\ 3\ ]
+Improperly\ specified\ VM\ option\ \[aq]AllocatePrefetchStyle=5\[aq]
+Error:\ Could\ not\ create\ the\ Java\ Virtual\ Machine.
 Error:\ A\ fatal\ exception\ has\ occurred.\ Program\ will\ exit.
 \f[R]
 .fi
@@ -5571,18 +5673,19 @@
 \f[CB]\-XX:SharedArchiveConfigFile=\f[R]\f[I]shared_config_file\f[R]
 .RE
 .PP
-JDK 9 and later supports adding both symbols and\ string objects to an
-archive for memory sharing\ when you have multiple JVM processes running
+JDK 9 and later supports adding both symbols and string objects to an
+archive for memory sharing when you have multiple JVM processes running
 on the same host.
 An example of this is having multiple JVM processes that use the same
 set of Java EE classes.
 When these common classes are loaded and used, new symbols and strings
 may be created and added to the JVM\[aq]s internal "symbol" and "string"
-tables.\ At runtime, the symbols or string objects mapped from the
-archive file can be shared across multiple JVM processes, resulting in a
-reduction of overall memory usage.\ In addition, archiving strings also
-provides added performance benefits in both startup time and runtime
-execution.
+tables.
+At runtime, the symbols or string objects mapped from the archive file
+can be shared across multiple JVM processes, resulting in a reduction of
+overall memory usage.
+In addition, archiving strings also provides added performance benefits
+in both startup time and runtime execution.
 .PP
 In JDK 10 and later, CONSTANT_String entries in archived classes are
 resolved to interned String objects at dump time, and all interned
@@ -5597,7 +5700,7 @@
 See \f[B]jcmd\f[R].
 .PP
 The following is an example of the symbol dumping command in
-\f[CB]jcmd\f[R]:\ 
+\f[CB]jcmd\f[R]:
 .RS
 .PP
 \f[CB]jcmd\f[R] \f[I]pid\f[R] \f[CB]VM.symboltable\ \-verbose\f[R]
--- a/src/java.base/share/man/jfr.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/man/jfr.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JFR" "1" "2019" "JDK 13" "JDK Commands"
+.TH "JFR" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/java.base/share/man/keytool.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.base/share/man/keytool.1	Wed Jan 15 01:54:35 2020 +0000
@@ -8,7 +8,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -22,7 +22,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "KEYTOOL" "1" "2019" "JDK 13" "JDK Commands"
+.TH "KEYTOOL" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -325,10 +325,10 @@
 .IP
 .nf
 \f[CB]
-keytool\ \-alias\ ca\ \-dname\ CN=CA\ \-genkeypair
-keytool\ \-alias\ ca1\ \-dname\ CN=CA\ \-genkeypair
-keytool\ \-alias\ ca2\ \-dname\ CN=CA\ \-genkeypair
-keytool\ \-alias\ e1\ \-dname\ CN=E1\ \-genkeypair
+keytool\ \-alias\ ca\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
+keytool\ \-alias\ ca1\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
+keytool\ \-alias\ ca2\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
+keytool\ \-alias\ e1\ \-dname\ CN=E1\ \-genkeypair\ \-keyalg\ rsa
 \f[R]
 .fi
 .PP
@@ -365,7 +365,7 @@
 .IP \[bu] 2
 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
 .IP \[bu] 2
-{\f[CB]\-keyalg\f[R] \f[I]alg\f[R]}: Key algorithm name
+\f[CB]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name
 .IP \[bu] 2
 {\f[CB]\-keysize\f[R] \f[I]size\f[R]}: Key bit size
 .IP \[bu] 2
@@ -379,7 +379,7 @@
 {\f[CB]\-startdate\f[R] \f[I]date\f[R]}: Certificate validity start date
 and time
 .IP \[bu] 2
-[\f[CB]\-ext\f[R] \f[I]value\f[R]}*: X.509 extension
+{\f[CB]\-ext\f[R] \f[I]value\f[R]}*: X.509 extension
 .IP \[bu] 2
 {\f[CB]\-validity\f[R] \f[I]days\f[R]}: Validity number of days
 .IP \[bu] 2
@@ -503,7 +503,7 @@
 .IP \[bu] 2
 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
 .IP \[bu] 2
-{\f[CB]\-keyalg\f[R] \f[I]alg\f[R]}: Key algorithm name
+\f[CB]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name
 .IP \[bu] 2
 {\f[CB]\-keysize\f[R] \f[I]size\f[R]}: Key bit size
 .IP \[bu] 2
@@ -675,7 +675,7 @@
 \f[CB]\-importkeystore\f[R] command:
 .RS
 .IP \[bu] 2
-{\f[CB]\-srckeystore\f[R] \f[I]keystore\f[R]}: Source keystore name
+\f[CB]\-srckeystore\f[R] \f[I]keystore\f[R]: Source keystore name
 .IP \[bu] 2
 {\f[CB]\-destkeystore\f[R] \f[I]keystore\f[R]}: Destination keystore name
 .IP \[bu] 2
@@ -1028,7 +1028,7 @@
 command:
 .RS
 .IP \[bu] 2
-\f[CB]\-file\ crl\f[R]: Input file name
+{\f[CB]\-file\ crl\f[R]}: Input file name
 .IP \[bu] 2
 {\f[CB]\-v\f[R]}: Verbose output
 .PP
@@ -1470,10 +1470,6 @@
 \f[CB]
 \-alias\ "mykey"
 
-\-keyalg
-\ \ \ \ "DSA"\ (when\ using\ \-genkeypair)
-\ \ \ \ "DES"\ (when\ using\ \-genseckey)
-
 \-keysize
 \ \ \ \ 2048\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "RSA")
 \ \ \ \ 2048\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "DSA")
@@ -1523,7 +1519,7 @@
 SHA256withDSA
 T}
 T{
-RSA \ \ \ 
+RSA
 T}@T{
 <= 3072
 T}@T{
@@ -1778,7 +1774,7 @@
 You can enter the command as a single line such as the following:
 .RS
 .PP
-\f[CB]keytool\ \-genkeypair\ \-dname\ "cn=myname,\ ou=mygroup,\ o=mycompany,\ c=mycountry"\ \-alias\ business\ \-keypass\f[R]
+\f[CB]keytool\ \-genkeypair\ \-dname\ "cn=myname,\ ou=mygroup,\ o=mycompany,\ c=mycountry"\ \-alias\ business\ \-keyalg\ rsa\ \-keypass\f[R]
 \f[I]password\f[R]
 \f[CB]\-keystore\ /working/mykeystore\ \-storepass\ password\ \-validity\ 180\f[R]
 .RE
@@ -1790,10 +1786,10 @@
 distinguished name is \f[CB]myname\f[R], \f[CB]mygroup\f[R],
 \f[CB]mycompany\f[R], and a two\-letter country code of
 \f[CB]mycountry\f[R].
-It uses the default DSA key generation algorithm to create the keys;
-both are 2048 bits
+It uses the RSA key generation algorithm to create the keys; both are
+2048 bits
 .PP
-The command uses the default SHA256withDSA signature algorithm to create
+The command uses the default SHA256withRSA signature algorithm to create
 a self\-signed certificate that includes the public key and the
 distinguished name information.
 The certificate is valid for 180 days, and is associated with the
@@ -1804,13 +1800,13 @@
 .PP
 The command is significantly shorter when the option defaults are
 accepted.
-In this case, no options are required, and the defaults are used for
-unspecified options that have default values.
+In this case, only \f[CB]\-keyalg\f[R] is required, and the defaults are
+used for unspecified options that have default values.
 You are prompted for any required values.
 You could have the following:
 .RS
 .PP
-\f[CB]keytool\ \-genkeypair\f[R]
+\f[CB]keytool\ \-genkeypair\ \-keyalg\ rsa\f[R]
 .RE
 .PP
 In this case, a keystore entry with the alias \f[CB]mykey\f[R] is created,
@@ -1824,10 +1820,9 @@
 .PP
 \f[B]Note:\f[R]
 .PP
-The rest of the examples assume that you executed the
-\f[CB]\-genkeypair\f[R] command without specifying options, and that you
-responded to the prompts with values equal to those specified in the
-first \f[CB]\-genkeypair\f[R] command.
+The rest of the examples assume that you responded to the prompts with
+values equal to those specified in the first \f[CB]\-genkeypair\f[R]
+command.
 For example, a distinguished name of
 \f[CB]cn=\f[R]\f[I]myname\f[R]\f[CB],\ ou=\f[R]\f[I]mygroup\f[R]\f[CB],\ o=\f[R]\f[I]mycompany\f[R]\f[CB],\ c=\f[R]\f[I]mycountry\f[R]).
 .SH REQUESTING A SIGNED CERTIFICATE FROM A CA
@@ -2042,13 +2037,12 @@
 SSL server (\f[CB]server\f[R])
 .PP
 Ensure that you store all the certificates in the same keystore.
-In the following examples, RSA is the recommended the key algorithm.
 .IP
 .nf
 \f[CB]
-keytool\ \-genkeypair\ \-keystore\ root.jks\ \-alias\ root\ \-ext\ bc:c
-keytool\ \-genkeypair\ \-keystore\ ca.jks\ \-alias\ ca\ \-ext\ bc:c
-keytool\ \-genkeypair\ \-keystore\ server.jks\ \-alias\ server
+keytool\ \-genkeypair\ \-keystore\ root.jks\ \-alias\ root\ \-ext\ bc:c\ \-keyalg\ rsa
+keytool\ \-genkeypair\ \-keystore\ ca.jks\ \-alias\ ca\ \-ext\ bc:c\ \-keyalg\ rsa
+keytool\ \-genkeypair\ \-keystore\ server.jks\ \-alias\ server\ \-keyalg\ rsa
 
 keytool\ \-keystore\ root.jks\ \-alias\ root\ \-exportcert\ \-rfc\ >\ root.pem
 
@@ -2117,7 +2111,8 @@
 See \f[B]Certificate Chains\f[R].
 .RS
 .PP
-\f[CB]keytool\ \-genkeypair\ \-alias\ duke\ \-keypass\f[R] \f[I]passwd\f[R]
+\f[CB]keytool\ \-genkeypair\ \-alias\ duke\ \-keyalg\ rsa\ \-keypass\f[R]
+\f[I]passwd\f[R]
 .RE
 .PP
 This example specifies an initial \f[I]passwd\f[R] required by subsequent
@@ -2615,7 +2610,7 @@
 A sample command using such a string is:
 .RS
 .PP
-\f[CB]keytool\ \-genkeypair\ \-dname\ "CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US"\ \-alias\ mark\f[R]
+\f[CB]keytool\ \-genkeypair\ \-dname\ "CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US"\ \-alias\ mark\ \-keyalg\ rsa\f[R]
 .RE
 .PP
 Case doesn\[aq]t matter for the keyword abbreviations.
--- a/src/java.compiler/share/classes/javax/annotation/processing/Filer.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.compiler/share/classes/javax/annotation/processing/Filer.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,7 @@
  * to overwrite existing files that were not generated.
  *
  * <p> Processors can indicate a source or class file is generated by
- * including a {@code javax.annotation.Generated} annotation if the
+ * including a {@link javax.annotation.processing.Generated} annotation if the
  * environment is configured so that that type is accessible.
  *
  * @apiNote Some of the effect of overwriting a file can be
--- a/src/java.compiler/share/classes/javax/annotation/processing/Processor.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.compiler/share/classes/javax/annotation/processing/Processor.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -130,7 +130,7 @@
  * annotations on elements, are ignored when computing whether or not
  * an annotation type is present.
  *
- * <p>An annotation is present if it meets the definition of being
+ * <p>An annotation is <em>present</em> if it meets the definition of being
  * present given in {@link AnnotatedConstruct}. In brief, an
  * annotation is considered present for the purposes of discovery if
  * it is directly present or present via inheritance. An annotation is
--- a/src/java.compiler/share/classes/javax/lang/model/AnnotatedConstruct.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.compiler/share/classes/javax/lang/model/AnnotatedConstruct.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -60,10 +60,17 @@
  * the source code of representation of <i>C</i>, then <i>A</i> is
  * explicitly declared as applying to <i>C</i>.
  *
+ * An annotation of type <i>AT</i> on a {@linkplain
+ * RecordComponentElement record component} can be implicitly propagated
+ * down to affiliated mandated members. Type annotations modifying the
+ * type of a record component can be also propagated to mandated
+ * members. Propagation of the annotations to mandated members is
+ * governed by rules given in the <cite>The Java&trade; Language
+ * Specification</cite>.
+ *
  * If there are multiple annotations of type <i>AT</i> present on
  * <i>C</i>, then if <i>AT</i> is repeatable annotation type, an
  * annotation of type <i>ATC</i> is {@linkplain javax.lang.model.util.Elements#getOrigin(AnnotatedConstruct, AnnotationMirror) implicitly declared} on <i>C</i>.
- *
  * <li> A representation of <i>A</i> appears in the executable output
  * for <i>C</i>, such as the {@code RuntimeVisibleAnnotations} or
  * {@code RuntimeVisibleParameterAnnotations} attributes of a class
--- a/src/java.rmi/share/man/rmid.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.rmi/share/man/rmid.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "RMID" "1" "2018" "JDK 13" "JDK Commands"
+.TH "RMID" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/java.rmi/share/man/rmiregistry.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.rmi/share/man/rmiregistry.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "RMIREGISTRY" "1" "2018" "JDK 13" "JDK Commands"
+.TH "RMIREGISTRY" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/java.scripting/share/man/jrunscript.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/java.scripting/share/man/jrunscript.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JRUNSCRIPT" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JRUNSCRIPT" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -31,7 +31,7 @@
 .PP
 \f[B]Note:\f[R]
 .PP
-This tool is \f[B]experimental\f[R]\ and unsupported.
+This tool is \f[B]experimental\f[R] and unsupported.
 .PP
 \f[CB]jrunscript\f[R] [\f[I]options\f[R]] [\f[I]arguments\f[R]]
 .TP
--- a/src/jdk.aot/share/man/jaotc.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.aot/share/man/jaotc.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAOTC" "1" "2019" "JDK 13" "JDK Commands"
+.TH "JAOTC" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -204,6 +204,6 @@
 .IP
 .nf
 \f[CB]
-java\ \-XX:AOTLibrary=./libHelloWorld.so\ HelloWorld
+java\ \-XX:+UnlockExperimentalVMOptions\ \-XX:AOTLibrary=./libHelloWorld.so\ HelloWorld
 \f[R]
 .fi
--- a/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java	Wed Jan 15 01:54:35 2020 +0000
@@ -46,17 +46,18 @@
  * <p> An attach provider implementation is typically tied to a Java virtual
  * machine implementation, version, or even mode of operation. That is, a specific
  * provider implementation will typically only be capable of attaching to
- * a specific Java virtual machine implementation or version. For example, Sun's
+ * a specific Java virtual machine implementation or version. For example, Oracle's
  * JDK implementation ships with provider implementations that can only attach to
- * Sun's <i>HotSpot</i> virtual machine. In general, if an environment
+ * Oracle's <i>HotSpot</i> virtual machine. In general, if an environment
  * consists of Java virtual machines of different versions and from different
  * vendors then there will be an attach provider implementation for each
  * <i>family</i> of implementations or versions.
  *
  * <p> An attach provider is identified by its {@link #name <i>name</i>} and
  * {@link #type <i>type</i>}. The <i>name</i> is typically, but not required to
- * be, a name that corresponds to the VM vendor. The Sun JDK implementation,
- * for example, ships with attach providers that use the name <i>"sun"</i>. The
+ * be, a name that corresponds to the VM vendor. The Oracle JDK implementation,
+ * for example, ships with attach providers that use the package name <i>"sun"</i>
+ * (for historical reasons). The
  * <i>type</i> typically corresponds to the attach mechanism. For example, an
  * implementation that uses the Doors inter-process communication mechanism
  * might use the type <i>"doors"</i>. The purpose of the name and type is to
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -228,7 +228,8 @@
     public static final long EFFECTIVELY_FINAL = 1L<<41;
 
     /**
-     * Flag that marks non-override equivalent methods with the same signature.
+     * Flag that marks non-override equivalent methods with the same signature,
+     * or a conflicting match binding (BindingSymbol).
      */
     public static final long CLASH = 1L<<42;
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1785,6 +1785,29 @@
 
     }
 
+    public static class BindingSymbol extends VarSymbol {
+
+        public BindingSymbol(Name name, Type type, Symbol owner) {
+            super(Flags.FINAL | Flags.HASINIT | Flags.MATCH_BINDING, name, type, owner);
+        }
+
+        public boolean isAliasFor(BindingSymbol b) {
+            return aliases().containsAll(b.aliases());
+        }
+
+        List<BindingSymbol> aliases() {
+            return List.of(this);
+        }
+
+        public void preserveBinding() {
+            flags_field |= Flags.MATCH_BINDING_TO_OUTER;
+        }
+
+        public boolean isPreserved() {
+            return (flags_field & Flags.MATCH_BINDING_TO_OUTER) != 0;
+        }
+    }
+
     /** A class for method symbols.
      */
     public static class MethodSymbol extends Symbol implements ExecutableElement {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,7 @@
 import com.sun.tools.javac.comp.ArgumentAttr.LocalCacheContext;
 import com.sun.tools.javac.comp.Check.CheckContext;
 import com.sun.tools.javac.comp.DeferredAttr.AttrMode;
-import com.sun.tools.javac.comp.MatchBindingsComputer.BindingSymbol;
+import com.sun.tools.javac.comp.MatchBindingsComputer.MatchBindings;
 import com.sun.tools.javac.jvm.*;
 import static com.sun.tools.javac.resources.CompilerProperties.Fragments.Diamond;
 import static com.sun.tools.javac.resources.CompilerProperties.Fragments.DiamondInvalidArg;
@@ -642,6 +642,8 @@
      */
     Type result;
 
+    MatchBindings matchBindings = MatchBindingsComputer.EMPTY;
+
     /** Visitor method: attribute a tree, catching any completion failure
      *  exceptions. Return the tree's type.
      *
@@ -660,6 +662,8 @@
             } else {
                 tree.accept(this);
             }
+            matchBindings = matchBindingsComputer.finishBindings(tree,
+                                                                 matchBindings);
             if (tree == breakTree &&
                     resultInfo.checkContext.deferredAttrContext().mode == AttrMode.CHECK) {
                 breakTreeFound(copyEnv(env));
@@ -1418,18 +1422,18 @@
         attribExpr(tree.cond, env, syms.booleanType);
         if (!breaksOutOf(tree, tree.body)) {
             //include condition's body when false after the while, if cannot get out of the loop
-            List<BindingSymbol> bindings = matchBindingsComputer.getMatchBindings(tree.cond, false);
-
-            bindings.forEach(env.info.scope::enter);
-            bindings.forEach(BindingSymbol::preserveBinding);
+            MatchBindings condBindings = matchBindings;
+            condBindings.bindingsWhenFalse.forEach(env.info.scope::enter);
+            condBindings.bindingsWhenFalse.forEach(BindingSymbol::preserveBinding);
         }
         result = null;
     }
 
     public void visitWhileLoop(JCWhileLoop tree) {
         attribExpr(tree.cond, env, syms.booleanType);
+        MatchBindings condBindings = matchBindings;
         // include condition's bindings when true in the body:
-        Env<AttrContext> whileEnv = bindingEnv(env, matchBindingsComputer.getMatchBindings(tree.cond, true));
+        Env<AttrContext> whileEnv = bindingEnv(env, condBindings.bindingsWhenTrue);
         try {
             attribStat(tree.body, whileEnv.dup(tree));
         } finally {
@@ -1437,11 +1441,8 @@
         }
         if (!breaksOutOf(tree, tree.body)) {
             //include condition's bindings when false after the while, if cannot get out of the loop
-            List<BindingSymbol> bindings =
-                    matchBindingsComputer.getMatchBindings(tree.cond, false);
-
-            bindings.forEach(env.info.scope::enter);
-            bindings.forEach(BindingSymbol::preserveBinding);
+            condBindings.bindingsWhenFalse.forEach(env.info.scope::enter);
+            condBindings.bindingsWhenFalse.forEach(BindingSymbol::preserveBinding);
         }
         result = null;
     }
@@ -1454,15 +1455,15 @@
     public void visitForLoop(JCForLoop tree) {
         Env<AttrContext> loopEnv =
             env.dup(env.tree, env.info.dup(env.info.scope.dup()));
+        MatchBindings condBindings = MatchBindingsComputer.EMPTY;
         try {
             attribStats(tree.init, loopEnv);
-            List<BindingSymbol> matchBindings = List.nil();
             if (tree.cond != null) {
                 attribExpr(tree.cond, loopEnv, syms.booleanType);
                 // include condition's bindings when true in the body and step:
-                matchBindings = matchBindingsComputer.getMatchBindings(tree.cond, true);
-            }
-            Env<AttrContext> bodyEnv = bindingEnv(loopEnv, matchBindings);
+                condBindings = matchBindings;
+            }
+            Env<AttrContext> bodyEnv = bindingEnv(loopEnv, condBindings.bindingsWhenTrue);
             try {
                 bodyEnv.tree = tree; // before, we were not in loop!
                 attribStats(tree.step, bodyEnv);
@@ -1477,11 +1478,8 @@
         }
         if (!breaksOutOf(tree, tree.body)) {
             //include condition's body when false after the while, if cannot get out of the loop
-            List<BindingSymbol> bindings =
-                    matchBindingsComputer.getMatchBindings(tree.cond, false);
-
-            bindings.forEach(env.info.scope::enter);
-            bindings.forEach(BindingSymbol::preserveBinding);
+            condBindings.bindingsWhenFalse.forEach(env.info.scope::enter);
+            condBindings.bindingsWhenFalse.forEach(BindingSymbol::preserveBinding);
         }
     }
 
@@ -1818,6 +1816,7 @@
 
     public void visitConditional(JCConditional tree) {
         Type condtype = attribExpr(tree.cond, env, syms.booleanType);
+        MatchBindings condBindings = matchBindings;
 
         tree.polyKind = (!allowPoly ||
                 pt().hasTag(NONE) && pt() != Type.recoveryType && pt() != Infer.anyPoly ||
@@ -1841,21 +1840,25 @@
         // include x's bindings when false in z
 
         Type truetype;
-        Env<AttrContext> trueEnv = bindingEnv(env, matchBindingsComputer.getMatchBindings(tree.cond, true));
+        Env<AttrContext> trueEnv = bindingEnv(env, condBindings.bindingsWhenTrue);
         try {
             truetype = attribTree(tree.truepart, trueEnv, condInfo);
         } finally {
             trueEnv.info.scope.leave();
         }
 
+        MatchBindings trueBindings = matchBindings;
+
         Type falsetype;
-        Env<AttrContext> falseEnv = bindingEnv(env, matchBindingsComputer.getMatchBindings(tree.cond, false));
+        Env<AttrContext> falseEnv = bindingEnv(env, condBindings.bindingsWhenFalse);
         try {
             falsetype = attribTree(tree.falsepart, falseEnv, condInfo);
         } finally {
             falseEnv.info.scope.leave();
         }
 
+        MatchBindings falseBindings = matchBindings;
+
         Type owntype = (tree.polyKind == PolyKind.STANDALONE) ?
                 condType(List.of(tree.truepart.pos(), tree.falsepart.pos()),
                          List.of(truetype, falsetype)) : pt();
@@ -1867,6 +1870,7 @@
             owntype = cfolder.coerce(condtype.isTrue() ? truetype : falsetype, owntype);
         }
         result = check(tree, owntype, KindSelector.VAL, resultInfo);
+        matchBindings = matchBindingsComputer.conditional(tree, condBindings, trueBindings, falseBindings);
     }
     //where
         private boolean isBooleanOrNumeric(Env<AttrContext> env, JCExpression tree) {
@@ -2022,8 +2026,8 @@
         // include x's bindings when true in y
         // include x's bindings when false in z
 
-        List<BindingSymbol> thenBindings = matchBindingsComputer.getMatchBindings(tree.cond, true);
-        Env<AttrContext> thenEnv = bindingEnv(env, thenBindings);
+        MatchBindings condBindings = matchBindings;
+        Env<AttrContext> thenEnv = bindingEnv(env, condBindings.bindingsWhenTrue);
 
         try {
             attribStat(tree.thenpart, thenEnv);
@@ -2034,10 +2038,9 @@
         preFlow(tree.thenpart);
         boolean aliveAfterThen = flow.aliveAfter(env, tree.thenpart, make);
         boolean aliveAfterElse;
-        List<BindingSymbol> elseBindings = matchBindingsComputer.getMatchBindings(tree.cond, false);
 
         if (tree.elsepart != null) {
-            Env<AttrContext> elseEnv = bindingEnv(env, elseBindings);
+            Env<AttrContext> elseEnv = bindingEnv(env, condBindings.bindingsWhenFalse);
             try {
                 attribStat(tree.elsepart, elseEnv);
             } finally {
@@ -2054,9 +2057,9 @@
         List<BindingSymbol> afterIfBindings = List.nil();
 
         if (aliveAfterThen && !aliveAfterElse) {
-            afterIfBindings = thenBindings;
+            afterIfBindings = condBindings.bindingsWhenTrue;
         } else if (aliveAfterElse && !aliveAfterThen) {
-            afterIfBindings = elseBindings;
+            afterIfBindings = condBindings.bindingsWhenFalse;
         }
 
         afterIfBindings.forEach(env.info.scope::enter);
@@ -3767,6 +3770,7 @@
             }
         }
         result = check(tree, owntype, KindSelector.VAL, resultInfo);
+        matchBindings = matchBindingsComputer.unary(tree, matchBindings);
     }
 
     public void visitBinary(JCBinary tree) {
@@ -3778,19 +3782,20 @@
         // x || y
         // include x's bindings when false in y
 
-        List<BindingSymbol> matchBindings;
+        MatchBindings lhsBindings = matchBindings;
+        List<BindingSymbol> propagatedBindings;
         switch (tree.getTag()) {
             case AND:
-                matchBindings = matchBindingsComputer.getMatchBindings(tree.lhs, true);
+                propagatedBindings = lhsBindings.bindingsWhenTrue;
                 break;
             case OR:
-                matchBindings = matchBindingsComputer.getMatchBindings(tree.lhs, false);
+                propagatedBindings = lhsBindings.bindingsWhenFalse;
                 break;
             default:
-                matchBindings = List.nil();
+                propagatedBindings = List.nil();
                 break;
         }
-        Env<AttrContext> rhsEnv = bindingEnv(env, matchBindings);
+        Env<AttrContext> rhsEnv = bindingEnv(env, propagatedBindings);
         Type right;
         try {
             right = chk.checkNonVoid(tree.rhs.pos(), attribExpr(tree.rhs, rhsEnv));
@@ -3798,6 +3803,8 @@
             rhsEnv.info.scope.leave();
         }
 
+        matchBindings = matchBindingsComputer.binary(tree, lhsBindings, matchBindings);
+
         // Find operator.
         Symbol operator = tree.operator = operators.resolveBinary(tree, tree.getTag(), left, right);
         Type owntype = types.createErrorType(tree.type);
@@ -3918,6 +3925,7 @@
         annotate.queueScanTreeAndTypeAnnotate(tree.vartype, env, v, tree.pos());
         annotate.flush();
         result = tree.type;
+        matchBindings = new MatchBindings(List.of(tree.symbol), List.nil());
     }
 
     public void visitIndexed(JCArrayAccess tree) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3604,7 +3604,10 @@
                 } else if ((sym.flags() & MATCH_BINDING) != 0 &&
                            (byName.flags() & MATCH_BINDING) != 0 &&
                            (byName.flags() & MATCH_BINDING_TO_OUTER) == 0) {
-                    //this error will be reported separatelly in MatchBindingsComputer
+                    if (!sym.type.isErroneous()) {
+                        log.error(pos, Errors.MatchBindingExists);
+                        sym.flags_field |= CLASH;
+                    }
                     return false;
                 } else {
                     duplicateError(pos, byName);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1855,21 +1855,17 @@
 
         /** Check that trackable variable is initialized.
          */
-        boolean checkInit(DiagnosticPosition pos, VarSymbol sym, boolean compactConstructor) {
-            return checkInit(pos, sym, Errors.VarMightNotHaveBeenInitialized(sym), compactConstructor);
+        void checkInit(DiagnosticPosition pos, VarSymbol sym) {
+            checkInit(pos, sym, Errors.VarMightNotHaveBeenInitialized(sym));
         }
 
-        boolean checkInit(DiagnosticPosition pos, VarSymbol sym, Error errkey, boolean compactConstructor) {
+        void checkInit(DiagnosticPosition pos, VarSymbol sym, Error errkey) {
             if ((sym.adr >= firstadr || sym.owner.kind != TYP) &&
                 trackable(sym) &&
                 !inits.isMember(sym.adr)) {
-                if (sym.owner.kind != TYP || !compactConstructor || !uninits.isMember(sym.adr)) {
                     log.error(pos, errkey);
-                }
                 inits.incl(sym.adr);
-                return false;
             }
-            return true;
         }
 
         /** Utility method to reset several Bits instances.
@@ -2099,15 +2095,27 @@
                                 // the ctor is default(synthesized) or not
                                 if (isSynthesized && !isCompactConstructor) {
                                     checkInit(TreeInfo.diagnosticPositionFor(var, vardecl),
-                                        var, Errors.VarNotInitializedInDefaultConstructor(var), isCompactConstructor);
-                                } else {
-                                    boolean wasInitialized = checkInit(TreeInfo.diagEndPos(tree.body), var, isCompactConstructor && tree.completesNormally);
-                                    if (!wasInitialized && var.owner.kind == TYP && isCompactConstructor && uninits.isMember(var.adr) && tree.completesNormally) {
+                                            var, Errors.VarNotInitializedInDefaultConstructor(var));
+                                } else if (isCompactConstructor) {
+                                    boolean isInstanceRecordField = var.enclClass().isRecord() &&
+                                            (var.flags_field & (Flags.PRIVATE | Flags.FINAL | Flags.GENERATED_MEMBER | Flags.RECORD)) != 0 &&
+                                            !var.isStatic() &&
+                                            var.owner.kind == TYP;
+                                    if (isInstanceRecordField) {
+                                        boolean notInitialized = !inits.isMember(var.adr);
+                                        if (notInitialized && uninits.isMember(var.adr) && tree.completesNormally) {
                                         /*  this way we indicate Lower that it should generate an initialization for this field
                                          *  in the compact constructor
                                          */
-                                        var.flags_field |= UNINITIALIZED_FIELD;
+                                            var.flags_field |= UNINITIALIZED_FIELD;
+                                        } else {
+                                            checkInit(TreeInfo.diagEndPos(tree.body), var);
+                                        }
+                                    } else {
+                                        checkInit(TreeInfo.diagnosticPositionFor(var, vardecl), var);
                                     }
+                                } else {
+                                    checkInit(TreeInfo.diagEndPos(tree.body), var);
                                 }
                             }
                         }
@@ -2124,7 +2132,7 @@
                             Assert.check(exit instanceof AssignPendingExit);
                             inits.assign(((AssignPendingExit) exit).exit_inits);
                             for (int i = firstadr; i < nextadr; i++) {
-                                checkInit(exit.tree.pos(), vardecls[i].sym, isCompactConstructor);
+                                checkInit(exit.tree.pos(), vardecls[i].sym);
                             }
                         }
                     }
@@ -2571,7 +2579,7 @@
                 recordExit(exit);
                 return ;
             } else {
-                scan(tree.value);
+                scanExpr(tree.value);
                 recordExit(new AssignPendingExit(tree, inits, uninits));
             }
         }
@@ -2666,7 +2674,7 @@
             super.visitSelect(tree);
             if (TreeInfo.isThisQualifier(tree.selected) &&
                 tree.sym.kind == VAR) {
-                checkInit(tree.pos(), (VarSymbol)tree.sym, false);
+                checkInit(tree.pos(), (VarSymbol)tree.sym);
             }
         }
 
@@ -2727,7 +2735,7 @@
 
         public void visitIdent(JCIdent tree) {
             if (tree.sym.kind == VAR) {
-                checkInit(tree.pos(), (VarSymbol)tree.sym, false);
+                checkInit(tree.pos(), (VarSymbol)tree.sym);
                 referenced(tree.sym);
             }
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MatchBindingsComputer.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MatchBindingsComputer.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,31 +25,26 @@
 
 package com.sun.tools.javac.comp;
 
-import com.sun.tools.javac.code.Flags;
 import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.Types;
+import com.sun.tools.javac.code.Symbol.BindingSymbol;
 import com.sun.tools.javac.resources.CompilerProperties.Errors;
 import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCBinary;
-import com.sun.tools.javac.tree.JCTree.JCConditional;
-import com.sun.tools.javac.tree.JCTree.JCUnary;
-import com.sun.tools.javac.tree.JCTree.JCBindingPattern;
+import com.sun.tools.javac.tree.JCTree.Tag;
 import com.sun.tools.javac.tree.TreeScanner;
 import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.Log;
-import com.sun.tools.javac.util.Name;
+
+import static com.sun.tools.javac.code.Flags.CLASH;
 
 
 public class MatchBindingsComputer extends TreeScanner {
+    public static final MatchBindings EMPTY = new MatchBindings(List.nil(), List.nil());
+
     protected static final Context.Key<MatchBindingsComputer> matchBindingsComputerKey = new Context.Key<>();
 
     private final Log log;
-    private final Types types;
-    boolean whenTrue;
-    List<BindingSymbol> bindings;
 
     public static MatchBindingsComputer instance(Context context) {
         MatchBindingsComputer instance = context.get(matchBindingsComputerKey);
@@ -60,106 +55,99 @@
 
     protected MatchBindingsComputer(Context context) {
         this.log = Log.instance(context);
-        this.types = Types.instance(context);
     }
 
-    public List<BindingSymbol> getMatchBindings(JCTree expression, boolean whenTrue) {
-        this.whenTrue = whenTrue;
-        this.bindings = List.nil();
-        scan(expression);
-        return bindings;
-    }
+    public MatchBindings conditional(JCTree tree, MatchBindings condBindings, MatchBindings trueBindings, MatchBindings falseBindings) {
+        if (condBindings == EMPTY &&
+            trueBindings == EMPTY &&
+            falseBindings == EMPTY) {
+            return EMPTY;
+        }
 
-    @Override
-    public void visitBindingPattern(JCBindingPattern tree) {
-        bindings = whenTrue ? List.of(tree.symbol) : List.nil();
-    }
+        DiagnosticPosition pos = tree.pos();
+         //A pattern variable is introduced both by a when true, and by c when true:
+        List<BindingSymbol> xTzT = intersection(pos, condBindings.bindingsWhenTrue, falseBindings.bindingsWhenTrue);
+         //A pattern variable is introduced both by a when false, and by b when true:
+        List<BindingSymbol> xFyT = intersection(pos, condBindings.bindingsWhenFalse, trueBindings.bindingsWhenTrue);
+         //A pattern variable is introduced both by b when true, and by c when true:
+        List<BindingSymbol> yTzT = intersection(pos, trueBindings.bindingsWhenTrue, falseBindings.bindingsWhenTrue);
+         //A pattern variable is introduced both by a when true, and by c when false:
+        List<BindingSymbol> xTzF = intersection(pos, condBindings.bindingsWhenTrue, falseBindings.bindingsWhenFalse);
+         //A pattern variable is introduced both by a when false, and by b when false:
+        List<BindingSymbol> xFyF = intersection(pos, condBindings.bindingsWhenFalse, trueBindings.bindingsWhenFalse);
+         //A pattern variable is introduced both by b when false, and by c when false:
+        List<BindingSymbol> yFzF = intersection(pos, trueBindings.bindingsWhenFalse, falseBindings.bindingsWhenFalse);
 
-    @Override
-    public void visitBinary(JCBinary tree) {
-        switch (tree.getTag()) {
-            case AND:
-                // e.T = union(x.T, y.T)
-                // e.F = intersection(x.F, y.F)
-                scan(tree.lhs);
-                List<BindingSymbol> lhsBindings = bindings;
-                scan(tree.rhs);
-                List<BindingSymbol> rhsBindings = bindings;
-                bindings = whenTrue ? union(tree, lhsBindings, rhsBindings) : intersection(tree, lhsBindings, rhsBindings);
-                break;
-            case OR:
-                // e.T = intersection(x.T, y.T)
-                // e.F = union(x.F, y.F)
-                scan(tree.lhs);
-                lhsBindings = bindings;
-                scan(tree.rhs);
-                rhsBindings = bindings;
-                bindings = whenTrue ? intersection(tree, lhsBindings, rhsBindings) : union(tree, lhsBindings, rhsBindings);
-                break;
-            default:
-                super.visitBinary(tree);
-                break;
-        }
-    }
-
-    @Override
-    public void visitUnary(JCUnary tree) {
-        switch (tree.getTag()) {
-            case NOT:
-                // e.T = x.F  // flip 'em
-                // e.F = x.T
-                whenTrue = !whenTrue;
-                scan(tree.arg);
-                whenTrue = !whenTrue;
-                break;
-            default:
-                super.visitUnary(tree);
-                break;
-        }
-    }
-
-    @Override
-    public void visitConditional(JCConditional tree) {
+        //error recovery:
         /* if e = "x ? y : z", then:
                e.T = union(intersect(y.T, z.T), intersect(x.T, z.T), intersect(x.F, y.T))
                e.F = union(intersect(y.F, z.F), intersect(x.T, z.F), intersect(x.F, y.F))
         */
-        if (whenTrue) {
-            List<BindingSymbol> xT, yT, zT, xF;
-            scan(tree.cond);
-            xT = bindings;
-            scan(tree.truepart);
-            yT = bindings;
-            scan(tree.falsepart);
-            zT = bindings;
-            whenTrue = false;
-            scan(tree.cond);
-            xF = bindings;
-            whenTrue = true;
-            bindings = union(tree, intersection(tree, yT, zT), intersection(tree, xT, zT), intersection(tree, xF, yT));
-        } else {
-            List<BindingSymbol> xF, yF, zF, xT;
-            scan(tree.cond);
-            xF = bindings;
-            scan(tree.truepart);
-            yF = bindings;
-            scan(tree.falsepart);
-            zF = bindings;
-            whenTrue = true;
-            scan(tree.cond);
-            xT = bindings;
-            whenTrue = false;
-            bindings = union(tree, intersection(tree, yF, zF), intersection(tree, xT, zF), intersection(tree, xF, yF));
+        List<BindingSymbol> bindingsWhenTrue = union(pos, yTzT, xTzT, xFyT);
+        List<BindingSymbol> bindingsWhenFalse = union(pos, yFzF, xTzF, xFyF);
+        return new MatchBindings(bindingsWhenTrue, bindingsWhenFalse);
+    }
+
+    public MatchBindings unary(JCTree tree, MatchBindings bindings) {
+        if (bindings == EMPTY || !tree.hasTag(Tag.NOT)) return bindings;
+        return new MatchBindings(bindings.bindingsWhenFalse, bindings.bindingsWhenTrue);
+    }
+
+    public MatchBindings binary(JCTree tree, MatchBindings lhsBindings, MatchBindings rhsBindings) {
+        switch (tree.getTag()) {
+            case AND: {
+                // e.T = union(x.T, y.T)
+                // e.F = intersection(x.F, y.F) (error recovery)
+                List<BindingSymbol> bindingsWhenTrue =
+                        union(tree.pos(), lhsBindings.bindingsWhenTrue, rhsBindings.bindingsWhenTrue);
+                List<BindingSymbol> bindingsWhenFalse = //error recovery
+                        intersection(tree.pos(), lhsBindings.bindingsWhenFalse, rhsBindings.bindingsWhenFalse);
+                return new MatchBindings(bindingsWhenTrue, bindingsWhenFalse);
+            }
+            case OR: {
+                // e.T = intersection(x.T, y.T) (error recovery)
+                // e.F = union(x.F, y.F)
+                List<BindingSymbol> bindingsWhenTrue = //error recovery
+                        intersection(tree.pos(), lhsBindings.bindingsWhenTrue, rhsBindings.bindingsWhenTrue);
+                List<Symbol.BindingSymbol> bindingsWhenFalse =
+                        union(tree.pos(), lhsBindings.bindingsWhenFalse, rhsBindings.bindingsWhenFalse);
+                return new MatchBindings(bindingsWhenTrue, bindingsWhenFalse);
+            }
+        }
+        return EMPTY;
+    }
+
+    public MatchBindings finishBindings(JCTree tree, MatchBindings matchBindings) {
+        switch (tree.getTag()) {
+            case NOT: case AND: case OR: case BINDINGPATTERN:
+            case PARENS: case TYPETEST:
+            case CONDEXPR: //error recovery:
+                return matchBindings;
+            default:
+                return MatchBindingsComputer.EMPTY;
         }
     }
 
-    private List<BindingSymbol> intersection(JCTree tree, List<BindingSymbol> lhsBindings, List<BindingSymbol> rhsBindings) {
+    public static class MatchBindings {
+
+        public final List<BindingSymbol> bindingsWhenTrue;
+        public final List<BindingSymbol> bindingsWhenFalse;
+
+        public MatchBindings(List<BindingSymbol> bindingsWhenTrue, List<BindingSymbol> bindingsWhenFalse) {
+            this.bindingsWhenTrue = bindingsWhenTrue;
+            this.bindingsWhenFalse = bindingsWhenFalse;
+        }
+
+    }
+    private List<BindingSymbol> intersection(DiagnosticPosition pos, List<BindingSymbol> lhsBindings, List<BindingSymbol> rhsBindings) {
         // It is an error if, for intersection(a,b), if a and b contain the same variable name (may be eventually relaxed to merge variables of same type)
         List<BindingSymbol> list = List.nil();
         for (BindingSymbol v1 : lhsBindings) {
             for (BindingSymbol v2 : rhsBindings) {
-                if (v1.name == v2.name) {
-                    log.error(tree.pos(), Errors.MatchBindingExists);
+                if (v1.name == v2.name &&
+                    (v1.flags() & CLASH) == 0 &&
+                    (v2.flags() & CLASH) == 0) {
+                    log.error(pos, Errors.MatchBindingExists);
                     list = list.append(v2);
                 }
             }
@@ -168,14 +156,16 @@
     }
 
     @SafeVarargs
-    private final List<BindingSymbol> union(JCTree tree, List<BindingSymbol> lhsBindings, List<BindingSymbol> ... rhsBindings_s) {
+    private final List<BindingSymbol> union(DiagnosticPosition pos, List<BindingSymbol> lhsBindings, List<BindingSymbol> ... rhsBindings_s) {
         // It is an error if for union(a,b), a and b contain the same name (disjoint union).
         List<BindingSymbol> list = lhsBindings;
         for (List<BindingSymbol> rhsBindings : rhsBindings_s) {
             for (BindingSymbol v : rhsBindings) {
                 for (BindingSymbol ov : list) {
-                    if (ov.name == v.name) {
-                        log.error(tree.pos(), Errors.MatchBindingExists);
+                    if (ov.name == v.name &&
+                        (ov.flags() & CLASH) == 0 &&
+                        (v.flags() & CLASH) == 0) {
+                        log.error(pos, Errors.MatchBindingExists);
                     }
                 }
                 list = list.append(v);
@@ -183,34 +173,4 @@
         }
         return list;
     }
-
-    @Override
-    public void scan(JCTree tree) {
-        bindings = List.nil();
-        super.scan(tree);
-    }
-
-    public static class BindingSymbol extends VarSymbol {
-
-        public BindingSymbol(Name name, Type type, Symbol owner) {
-            super(Flags.FINAL | Flags.HASINIT | Flags.MATCH_BINDING, name, type, owner);
-        }
-
-        public boolean isAliasFor(BindingSymbol b) {
-            return aliases().containsAll(b.aliases());
-        }
-
-        List<BindingSymbol> aliases() {
-            return List.of(this);
-        }
-
-        public void preserveBinding() {
-            flags_field |= Flags.MATCH_BINDING_TO_OUTER;
-        }
-
-        public boolean isPreserved() {
-            return (flags_field & Flags.MATCH_BINDING_TO_OUTER) != 0;
-        }
-    }
-
 }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1489,7 +1489,13 @@
             if (sym.exists()) {
                 if (staticOnly &&
                     sym.kind == VAR &&
-                    sym.owner.kind == TYP &&
+                        // if it is a field
+                        (sym.owner.kind == TYP ||
+                        // or it is a local variable but it is not declared inside of the static local type
+                        // only records so far, then error
+                        (sym.owner.kind == MTH) &&
+                        (env.enclClass.sym.flags() & STATIC) != 0 &&
+                        sym.enclClass() != env.enclClass.sym) &&
                     (sym.flags() & STATIC) == 0)
                     return new StaticError(sym);
                 else
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,11 +26,12 @@
 package com.sun.tools.javac.comp;
 
 import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.code.Symbol;
+import com.sun.tools.javac.code.Symbol.BindingSymbol;
 import com.sun.tools.javac.code.Symbol.VarSymbol;
 import com.sun.tools.javac.code.Symtab;
 import com.sun.tools.javac.code.Type;
 import com.sun.tools.javac.code.Types;
-import com.sun.tools.javac.comp.MatchBindingsComputer.BindingSymbol;
 import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.tree.JCTree.JCAssign;
 import com.sun.tools.javac.tree.JCTree.JCBinary;
@@ -42,7 +43,6 @@
 import com.sun.tools.javac.tree.JCTree.JCInstanceOf;
 import com.sun.tools.javac.tree.JCTree.JCLabeledStatement;
 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
-import com.sun.tools.javac.tree.JCTree.JCStatement;
 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
 import com.sun.tools.javac.tree.JCTree.JCBindingPattern;
 import com.sun.tools.javac.tree.JCTree.JCWhileLoop;
@@ -51,7 +51,6 @@
 import com.sun.tools.javac.tree.TreeTranslator;
 import com.sun.tools.javac.util.Assert;
 import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.ListBuffer;
 import com.sun.tools.javac.util.Log;
 import com.sun.tools.javac.util.Names;
@@ -59,18 +58,18 @@
 
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.stream.Collectors;
 
 import com.sun.tools.javac.code.Symbol.MethodSymbol;
-import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
 import static com.sun.tools.javac.code.TypeTag.BOT;
-import com.sun.tools.javac.comp.MatchBindingsComputer.BindingSymbol;
 import com.sun.tools.javac.jvm.Target;
+import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.tree.JCTree.JCBlock;
 import com.sun.tools.javac.tree.JCTree.JCDoWhileLoop;
+import com.sun.tools.javac.tree.JCTree.JCLambda;
 import com.sun.tools.javac.tree.JCTree.JCStatement;
 import com.sun.tools.javac.tree.JCTree.LetExpr;
 import com.sun.tools.javac.util.List;
+import java.util.HashMap;
 
 /**
  * This pass translates pattern-matching constructs, such as instanceof <pattern>.
@@ -93,11 +92,15 @@
     private final ConstFold constFold;
     private final Names names;
     private final Target target;
-    private final MatchBindingsComputer matchBindingsComputer;
     private TreeMaker make;
 
     BindingContext bindingContext = new BindingContext() {
         @Override
+        VarSymbol bindingDeclared(BindingSymbol varSymbol) {
+            return null;
+        }
+
+        @Override
         VarSymbol getBindingFor(BindingSymbol varSymbol) {
             return null;
         }
@@ -140,7 +143,6 @@
         constFold = ConstFold.instance(context);
         names = Names.instance(context);
         target = Target.instance(context);
-        matchBindingsComputer = MatchBindingsComputer.instance(context);
         debugTransPatterns = Options.instance(context).isSet("debug.patterns");
     }
 
@@ -164,8 +166,8 @@
 
             result = makeTypeTest(make.Ident(temp), make.Type(castTargetType));
 
-            VarSymbol bindingVar = bindingContext.getBindingFor(patt.symbol);
-            if (bindingVar != null) {
+            VarSymbol bindingVar = bindingContext.bindingDeclared(patt.symbol);
+            if (bindingVar != null) { //TODO: cannot be null here?
                 JCAssign fakeInit = (JCAssign)make.at(tree.pos).Assign(
                         make.Ident(bindingVar), convert(make.Ident(temp), castTargetType)).setType(bindingVar.erasure(types));
                 result = makeBinary(Tag.AND, (JCExpression)result,
@@ -180,20 +182,7 @@
 
     @Override
     public void visitBinary(JCBinary tree) {
-        List<BindingSymbol> matchBindings;
-        switch (tree.getTag()) {
-            case AND:
-                matchBindings = matchBindingsComputer.getMatchBindings(tree.lhs, true);
-                break;
-            case OR:
-                matchBindings = matchBindingsComputer.getMatchBindings(tree.lhs, false);
-                break;
-            default:
-                matchBindings = List.nil();
-                break;
-        }
-
-        bindingContext = new BasicBindingContext(matchBindings);
+        bindingContext = new BasicBindingContext();
         try {
             super.visitBinary(tree);
             result = bindingContext.decorateExpression(tree);
@@ -204,9 +193,7 @@
 
     @Override
     public void visitConditional(JCConditional tree) {
-        bindingContext = new BasicBindingContext(
-                matchBindingsComputer.getMatchBindings(tree.cond, true)
-                        .appendList(matchBindingsComputer.getMatchBindings(tree.cond, false)));
+        bindingContext = new BasicBindingContext();
         try {
             super.visitConditional(tree);
             result = bindingContext.decorateExpression(tree);
@@ -217,7 +204,7 @@
 
     @Override
     public void visitIf(JCIf tree) {
-        bindingContext = new BasicBindingContext(getMatchBindings(tree.cond));
+        bindingContext = new BasicBindingContext();
         try {
             super.visitIf(tree);
             result = bindingContext.decorateStatement(tree);
@@ -228,7 +215,7 @@
 
     @Override
     public void visitForLoop(JCForLoop tree) {
-        bindingContext = new BasicBindingContext(getMatchBindings(tree.cond));
+        bindingContext = new BasicBindingContext();
         try {
             super.visitForLoop(tree);
             result = bindingContext.decorateStatement(tree);
@@ -239,7 +226,7 @@
 
     @Override
     public void visitWhileLoop(JCWhileLoop tree) {
-        bindingContext = new BasicBindingContext(getMatchBindings(tree.cond));
+        bindingContext = new BasicBindingContext();
         try {
             super.visitWhileLoop(tree);
             result = bindingContext.decorateStatement(tree);
@@ -250,7 +237,7 @@
 
     @Override
     public void visitDoLoop(JCDoWhileLoop tree) {
-        bindingContext = new BasicBindingContext(getMatchBindings(tree.cond));
+        bindingContext = new BasicBindingContext();
         try {
             super.visitDoLoop(tree);
             result = bindingContext.decorateStatement(tree);
@@ -286,7 +273,7 @@
     @Override
     public void visitBlock(JCBlock tree) {
         ListBuffer<JCStatement> statements = new ListBuffer<>();
-        bindingContext = new BasicBindingContext(List.nil()) {
+        bindingContext = new BindingDeclarationFenceBindingContext() {
             boolean tryPrepend(BindingSymbol binding, JCVariableDecl var) {
                 //{
                 //    if (E instanceof T N) {
@@ -319,6 +306,17 @@
         }
     }
 
+    @Override
+    public void visitLambda(JCLambda tree) {
+        BindingContext prevContent = bindingContext;
+        try {
+            bindingContext = new BindingDeclarationFenceBindingContext();
+            super.visitLambda(tree);
+        } finally {
+            bindingContext = prevContent;
+        }
+    }
+
     public JCTree translateTopLevelClass(Env<AttrContext> env, JCTree cdef, TreeMaker make) {
         try {
             this.make = make;
@@ -360,11 +358,8 @@
         return result;
     }
 
-    private List<BindingSymbol> getMatchBindings(JCExpression cond) {
-        return matchBindingsComputer.getMatchBindings(cond, true)
-                        .appendList(matchBindingsComputer.getMatchBindings(cond, false));
-    }
     abstract class BindingContext {
+        abstract VarSymbol bindingDeclared(BindingSymbol varSymbol);
         abstract VarSymbol getBindingFor(BindingSymbol varSymbol);
         abstract JCStatement decorateStatement(JCStatement stat);
         abstract JCExpression decorateExpression(JCExpression expr);
@@ -373,20 +368,23 @@
     }
 
     class BasicBindingContext extends BindingContext {
-        List<BindingSymbol> matchBindings;
         Map<BindingSymbol, VarSymbol> hoistedVarMap;
         BindingContext parent;
 
-        public BasicBindingContext(List<BindingSymbol> matchBindings) {
-            this.matchBindings = matchBindings;
+        public BasicBindingContext() {
             this.parent = bindingContext;
-            this.hoistedVarMap = matchBindings.stream()
-                    .filter(v -> parent.getBindingFor(v) == null)
-                    .collect(Collectors.toMap(v -> v, v -> {
-                        VarSymbol res = new VarSymbol(v.flags(), v.name, v.type, v.owner);
-                        res.setTypeAttributes(v.getRawTypeAttributes());
-                        return res;
-                    }));
+            this.hoistedVarMap = new HashMap<>();
+        }
+
+        @Override
+        VarSymbol bindingDeclared(BindingSymbol varSymbol) {
+            VarSymbol res = parent.bindingDeclared(varSymbol);
+            if (res == null) {
+                res = new VarSymbol(varSymbol.flags(), varSymbol.name, varSymbol.type, varSymbol.owner);
+                res.setTypeAttributes(varSymbol.getRawTypeAttributes());
+                hoistedVarMap.put(varSymbol, res);
+            }
+            return res;
         }
 
         @Override
@@ -454,4 +452,13 @@
             return make.at(pos).VarDef(varSymbol, null);
         }
     }
+
+    private class BindingDeclarationFenceBindingContext extends BasicBindingContext {
+
+        @Override
+        VarSymbol bindingDeclared(BindingSymbol varSymbol) {
+            return null;
+        }
+
+    }
 }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3746,7 +3746,7 @@
                     ListBuffer<JCVariableDecl> tmpParams = new ListBuffer<>();
                     for (JCVariableDecl param : headerFields) {
                         tmpParams.add(F.at(param)
-                                .VarDef(F.Modifiers(Flags.PARAMETER | param.mods.flags & Flags.VARARGS | param.mods.flags & Flags.FINAL),
+                                .VarDef(F.Modifiers(Flags.PARAMETER | param.mods.flags & Flags.VARARGS),
                                 param.name, param.vartype, null));
                     }
                     methDef.params = tmpParams.toList();
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,6 @@
 import com.sun.tools.javac.code.Directive.RequiresDirective;
 import com.sun.tools.javac.code.Scope.*;
 import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.comp.MatchBindingsComputer.BindingSymbol;
 import com.sun.tools.javac.util.*;
 import com.sun.tools.javac.util.DefinedBy.Api;
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
--- a/src/jdk.compiler/share/man/javac.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/man/javac.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAVAC" "1" "2019" "JDK 13" "JDK Commands"
+.TH "JAVAC" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -65,8 +65,8 @@
 command line.
 .IP \[bu] 2
 For a large number of source files, you can use the
-\f[CB]\@\f[R]\f[I]filename\f[R] option on the command line to specify an
-\f[I]argument file\f[R] that lists their file names.
+\f[B]\f[BC]\@\f[B]\f[BI]filename\f[B]\f[R] option on the command line to
+specify an \f[I]argument file\f[R] that lists their file names.
 See \f[B]Standard Options\f[R] for a description of the option and
 \f[B]Command\-Line Argument Files\f[R] for a description of
 \f[CB]javac\f[R] argument files.
@@ -100,7 +100,7 @@
 By default, \f[CB]javac\f[R] compiles each source file to a class file in
 the same directory as the source file.
 However, it is recommended to specify a separate destination directory
-with the \f[CB]\-d\f[R] option described in \f[B]Standard Options\f[R].
+with the \f[B]\f[BC]\-d\f[B]\f[R] option.
 .PP
 Command\-line \f[B]options\f[R] and \f[B]environment variables\f[R] also
 control how \f[CB]javac\f[R] performs various tasks:
@@ -160,7 +160,7 @@
 Reads options and file names from a file.
 To shorten or simplify the \f[CB]javac\f[R] command, you can specify one
 or more files that contain arguments to the \f[CB]javac\f[R] command
-(except \f[CB]\-J\f[R] options).
+(except \f[B]\f[BC]\-J\f[B]\f[R] options).
 This lets you to create \f[CB]javac\f[R] commands of any length on any
 operating system.
 See \f[B]Command\-Line Argument Files\f[R].
@@ -179,7 +179,7 @@
 .B \f[CB]\-\-add\-modules\f[R] \f[I]module\f[R]\f[CB],\f[R]\f[I]module\f[R]
 Specifies root modules to resolve in addition to the initial modules, or
 all modules on the module path if \f[I]module\f[R] is
-\f[CB]ALL\-MODULE\-PATH.\f[R]
+\f[CB]ALL\-MODULE\-PATH\f[R].
 .RS
 .RE
 .TP
@@ -189,9 +189,10 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
-For JDK 9 or later, see \f[CB]\-\-system\f[R].
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
+For JDK 9 or later, see \f[B]\f[BC]\-\-system\f[B]\f[R].
 .RE
 .TP
 .B \f[CB]\-\-class\-path\f[R] \f[I]path\f[R], \f[CB]\-classpath\f[R] \f[I]path\f[R], or \f[CB]\-cp\f[R] \f[I]path\f[R]
@@ -205,12 +206,12 @@
 \f[CB]CLASSPATH\f[R] environment variable, if that is set, or else the
 current directory.
 .IP \[bu] 2
-If not compiling code for modules, if the \f[CB]\-\-source\-path\f[R] or
-\-sourcepath` option is not specified, then the user class path is also
-searched for source files.
+If not compiling code for modules, if the
+\f[B]\f[BC]\-\-source\-path\f[B]\f[R] or \-sourcepath` option is not
+specified, then the user class path is also searched for source files.
 .IP \[bu] 2
-If the \f[CB]\-processorpath\f[R] option is not specified, then the class
-path is also searched for annotation processors.
+If the \f[B]\f[BC]\-processorpath\f[B]\f[R] option is not specified, then
+the class path is also searched for annotation processors.
 .RE
 .TP
 .B \f[CB]\-d\f[R] \f[I]directory\f[R]
@@ -257,8 +258,8 @@
 .TP
 .B \f[CB]\-\-enable\-preview\f[R]
 Enables preview language features.
-Used in conjunction with either \f[CB]\-source\f[R] or
-\f[CB]\-\-release\f[R].
+Used in conjunction with either \f[B]\f[BC]\-source\f[B]\f[R] or
+\f[B]\f[BC]\-\-release\f[B]\f[R].
 .RS
 .RE
 .TP
@@ -276,8 +277,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-extdirs\f[R] \f[I]directories\f[R]
@@ -295,8 +297,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-g\f[R]
@@ -468,8 +471,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-\-release\f[R] \f[I]release\f[R]
@@ -495,8 +499,8 @@
 that release.
 .PP
 \f[B]Note:\f[R] When using \f[CB]\-\-release\f[R], you cannot also use the
-\f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
-\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options.
+\f[B]\f[BC]\-\-source\f[B]\f[R]/\f[CB]\-source\f[R] or
+\f[B]\f[BC]\-\-target\f[B]\f[R]/\f[CB]\-target\f[R] options.
 .PP
 \f[B]Note:\f[R] When using \f[CB]\-\-release\f[R] to specify a release that
 supports the Java Platform Module System, the \f[CB]\-\-add\-exports\f[R]
@@ -560,7 +564,7 @@
 .PP
 \f[B]Note:\f[R] The target release must be equal to or higher than the
 source release.
-(See \f[CB]\-\-source\f[R].)
+(See \f[B]\f[BC]\-\-source\f[B]\f[R].)
 .RE
 .TP
 .B \f[CB]\-\-upgrade\-module\-path\f[R] \f[I]path\f[R]
@@ -611,8 +615,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-Djava.ext.dirs=\f[R]\f[I]dirs\f[R]
@@ -621,8 +626,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-\-doclint\-format\f[R] [\f[CB]html4\f[R]|\f[CB]html5\f[R]]
@@ -642,8 +648,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-Xbootclasspath/a:\f[R]\f[I]path\f[R]
@@ -652,8 +659,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-Xbootclasspath/p:\f[R]\f[I]path\f[R]
@@ -662,8 +670,9 @@
 .PP
 \f[B]Note:\f[R] This can only be used when compiling for releases prior
 to JDK 9.
-As applicable, see the descriptions in \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+As applicable, see the descriptions in \f[B]\f[BC]\-\-release\f[B]\f[R],
+\f[B]\f[BC]\-source\f[B]\f[R], or \f[B]\f[BC]\-target\f[B]\f[R] for
+details.
 .RE
 .TP
 .B \f[CB]\-Xdiags:\f[R][\f[CB]compact\f[R], \f[CB]verbose\f[R]]
@@ -929,9 +938,9 @@
 .SH ENVIRONMENT VARIABLES
 .SS CLASSPATH
 .PP
-If the \f[CB]\-\-class\-path\f[R] option or any of its alternate forms are
-not specified, the class path will default to the value of the
-\f[CB]CLASSPATH\f[R] environment variable if it is set.
+If the \f[B]\f[BC]\-\-class\-path\f[B]\f[R] option or any of its
+alternate forms are not specified, the class path will default to the
+value of the \f[CB]CLASSPATH\f[R] environment variable if it is set.
 However, it is recommended that this environment variable should
 \f[I]not\f[R] be set, and that the \f[CB]\-\-class\-path\f[R] option should
 be used to provide an explicit value for the class path when one is
@@ -1181,12 +1190,12 @@
 around those limits, you can use \f[B]argument files\f[R].
 .PP
 When compiling code for modules, you can also specify source files
-indirectly, by using the \f[CB]\-\-module\f[R] or \f[CB]\-m\f[R] option; see
-\f[B]Standard Options\f[R].
+indirectly, by using the \f[B]\f[BC]\-\-module\f[B]\f[R] or \f[CB]\-m\f[R]
+option.
 .SS Output Directory
 .IP \[bu] 2
-Use the \f[CB]\-d\f[R] option to specify an output directory in which to
-put the compiled class files.
+Use the \f[B]\f[BC]\-d\f[B]\f[R] option to specify an output directory in
+which to put the compiled class files.
 .PP
 This will normally be organized in a \f[B]package hierarchy\f[R], unless
 you are compiling source code from multiple modules, in which case it
@@ -1204,15 +1213,15 @@
 If the library code is not in a module, place it on the class path; if
 it is in a module, place it on the module path.
 .IP \[bu] 2
-Use the \f[CB]\-\-class\-path\f[R] option to specify libraries to be
-placed on the class path.
+Use the \f[B]\f[BC]\-\-class\-path\f[B]\f[R] option to specify libraries
+to be placed on the class path.
 Locations on the class path should be organized in a \f[B]package
 hierarchy\f[R].
 You can also use alternate forms of the option: \f[CB]\-classpath\f[R] or
 \f[CB]\-cp\f[R].
 .IP \[bu] 2
-Use the \f[CB]\-\-module\-path\f[R] option to specify libraries to be
-placed on the module path.
+Use the \f[B]\f[BC]\-\-module\-path\f[B]\f[R] option to specify libraries
+to be placed on the module path.
 Locations on the module path should either be modules or directories of
 modules.
 You can also use an alternate form of the option: \f[CB]\-p\f[R].
@@ -1236,23 +1245,24 @@
 the source path; if you are compiling code for multiple modules, use the
 module source path.
 .IP \[bu] 2
-Use the \f[CB]\-\-source\-path\f[R] option to specify the locations of
-additional source files that may be read by javac.
+Use the \f[B]\f[BC]\-\-source\-path\f[B]\f[R] option to specify the
+locations of additional source files that may be read by javac.
 Locations on the source path should be organized in a \f[B]package
 hierarchy\f[R].
 You can also use an alternate form of the option: \f[CB]\-sourcepath\f[R].
 .IP \[bu] 2
-Use the \f[CB]\-\-module\-source\-path\f[R] option one or more times to
-specify the location of additional source files in different modules
-that may be read by javac, or when compiling source files in multiple
-modules.
+Use the \f[B]\f[BC]\-\-module\-source\-path\f[B]\f[R] option one or more
+times to specify the location of additional source files in different
+modules that may be read by javac, or when compiling source files in
+multiple modules.
 You can either specify the locations for each module
 \f[B]individually\f[R], or you can organize the source files so that you
 can specify the locations all \f[B]together\f[R].
 For more details, see \f[B]The Module Source Path Option\f[R].
 .PP
 If you want to be able to refer to types in additional source files but
-do not want them to be compiled, use the \f[CB]\-implicit\f[R] option.
+do not want them to be compiled, use the \f[B]\f[BC]\-implicit\f[B]\f[R]
+option.
 .PP
 \f[B]Note\f[R]: if you are compiling code for multiple modules, you must
 always specify a module source path, and all source files specified on
@@ -1371,30 +1381,30 @@
 .SH CONFIGURING THE MODULE SYSTEM
 .PP
 If you want to include additional modules in your compilation, use the
-\f[CB]\-\-add\-modules\f[R] option.
+\f[B]\f[BC]\-\-add\-modules\f[B]\f[R] option.
 This may be necessary when you are compiling code that is not in a
 module, or which is in an automatic module, and the code refers to API
 in the additional modules.
 .PP
 If you want to restrict the set of modules in your compilation, use the
-\f[CB]\-\-limit\-modules\f[R] option.
+\f[B]\f[BC]\-\-limit\-modules\f[B]\f[R] option.
 This may be useful if you want to ensure that the code you are compiling
 is capable of running on a system with a limited set of modules
 installed.
 .PP
 If you want to break encapsulation and specify that additional packages
 should be considered as exported from a module, use the
-\f[CB]\-\-add\-exports\f[R] option.
+\f[B]\f[BC]\-\-add\-exports\f[B]\f[R] option.
 This may be useful when performing white\-box testing; relying on access
 to internal API in production code is strongly discouraged.
 .PP
 If you want to specify that additional packages should be considered as
-required by a module, use the \f[CB]\-\-add\-reads\f[R] option.
+required by a module, use the \f[B]\f[BC]\-\-add\-reads\f[B]\f[R] option.
 This may be useful when performing white\-box testing; relying on access
 to internal API in production code is strongly discouraged.
 .PP
 You can patch additional content into any module using the
-\f[CB]\-\-patch\-module\f[R] option.
+\f[B]\f[BC]\-\-patch\-module\f[B]\f[R] option.
 See [Patching a Module] for more details.
 .SH SEARCHING FOR MODULE, PACKAGE AND TYPE DECLARATIONS
 .PP
@@ -1416,24 +1426,23 @@
 available the declaration of that module.
 .PP
 A successful search may produce a class file, a source file, or both.
-If both are found, then you can use the \f[CB]\-Xprefer\f[R] option to
-instruct the compiler which to use; see \f[B]Extra Options\f[R].
+If both are found, then you can use the \f[B]\f[BC]\-Xprefer\f[B]\f[R]
+option to instruct the compiler which to use.
 .PP
 If a search finds and uses a source file, then by default \f[CB]javac\f[R]
 compiles that source file.
-This behavior can be altered with \f[CB]\-implicit\f[R]; see \f[B]Standard
-Options\f[R].
+This behavior can be altered with \f[B]\f[BC]\-implicit\f[B]\f[R].
 .PP
 The compiler might not discover the need for some type information until
 after annotation processing completes.
 When the type information is found in a source file and no
-\f[CB]\-implicit\f[R] option is specified, the compiler gives a warning
-that the file is being compiled without being subject to annotation
-processing.
+\f[B]\f[BC]\-implicit\f[B]\f[R] option is specified, the compiler gives a
+warning that the file is being compiled without being subject to
+annotation processing.
 To disable the warning, either specify the file on the command line (so
 that it will be subject to annotation processing) or use the
-\f[CB]\-implicit\f[R] option to specify whether or not class files should
-be generated for such source files.
+\f[B]\f[BC]\-implicit\f[B]\f[R] option to specify whether or not class
+files should be generated for such source files.
 .PP
 The way that \f[CB]javac\f[R] locates the declarations of those types
 depends on whether the reference exists within code for a module or not.
@@ -1459,15 +1468,16 @@
 \f[CB]javac\f[R] will lazily scan the following paths and locations to
 determine the modules that will be used in the compilation.
 .IP \[bu] 2
-The module source path (see the \f[CB]\-\-module\-source\-path\f[R]
-option)
+The module source path (see the
+\f[B]\f[BC]\-\-module\-source\-path\f[B]\f[R] option)
 .IP \[bu] 2
 The path for upgradeable modules (see the
-\f[CB]\-\-upgrade\-module\-path\f[R] option)
+\f[B]\f[BC]\-\-upgrade\-module\-path\f[B]\f[R] option)
 .IP \[bu] 2
-The system modules (see the \f[CB]\-\-system\f[R] option)
+The system modules (see the \f[B]\f[BC]\-\-system\f[B]\f[R] option)
 .IP \[bu] 2
-The user module path ( see the \f[CB]\-\-module\-path\f[R] option)
+The user module path ( see the \f[B]\f[BC]\-\-module\-path\f[B]\f[R]
+option)
 .PP
 For any module, the first occurrence of the module during the scan
 completely shadows (hides) any subsequent appearance of a like\-named
@@ -1524,8 +1534,8 @@
 modified file will be used by default.
 If the source file is newer, it will be compiled and will may override
 any previously compiled version of the file.
-You can use the \f[CB]\-Xprefer\f[R] option to override the default
-behavior.
+You can use the \f[B]\f[BC]\-Xprefer\f[B]\f[R] option to override the
+default behavior.
 .SS Searching for the Declaration of a Type When the Reference is in a
 Module
 .PP
@@ -1570,11 +1580,12 @@
 .PP
 The location of these hierarchies are specified to \f[CB]javac\f[R] with
 command\-line options, whose names typically end in "path", like
-\f[CB]\-\-source\-path\f[R] or \f[CB]\-\-class\-path\f[R].
+\f[B]\f[BC]\-\-source\-path\f[B]\f[R] or
+\f[B]\f[BC]\-\-class\-path\f[B]\f[R].
 Also as a general rule, path options whose name includes the word
-\f[CB]module\f[R], like \f[CB]\-\-module\-path\f[R], are used to specify
-module hierarchies, although some module\-related path options allow a
-package hierarchy to be specified on a per\-module basis.
+\f[CB]module\f[R], like \f[B]\f[BC]\-\-module\-path\f[B]\f[R], are used to
+specify module hierarchies, although some module\-related path options
+allow a package hierarchy to be specified on a per\-module basis.
 All other path options are used to specify package hierarchies.
 .SS Package Hierarchy
 .PP
@@ -1618,7 +1629,7 @@
 \f[I]my.library/src/main/java/com/example/MyClass.java\f[R].
 .SH THE MODULE SOURCE PATH OPTION
 .PP
-The \f[CB]\-\-module\-source\-path\f[R] option has two forms: a
+The \f[B]\f[BC]\-\-module\-source\-path\f[B]\f[R] option has two forms: a
 \f[I]module\-specific form\f[R], in which a package path is given for
 each module containing code to be compiled, and a
 \f[I]module\-pattern\f[R] form, in which the source path for each module
@@ -1653,7 +1664,7 @@
 otherwise.
 .PP
 \f[B]Note:\f[R] this is similar to the form used for the
-\f[CB]\-\-patch\-module\f[R] option.
+\f[B]\f[BC]\-\-patch\-module\f[B]\f[R] option.
 .SS Module\-pattern form
 .PP
 The module\-pattern form allows a concise specification of the module
@@ -1710,7 +1721,8 @@
 .SH PATCHING MODULES
 .PP
 javac allows any content, whether in source or compiled form, to be
-patched into any module using the \f[CB]\-\-patch\-module\f[R] option.
+patched into any module using the \f[B]\f[BC]\-\-patch\-module\f[B]\f[R]
+option.
 You may want to do this to compile alternative implementations of a
 class to be patched at runtime into a JVM, or to inject additional
 classes into the module, such as when testing.
@@ -1731,9 +1743,9 @@
 path and in the patched module.
 .PP
 When patching source code into more than one module, the
-\f[CB]\-\-module\-source\-path\f[R] must also be used, so that the output
-directory is organized in a module hierarchy, and capable of holding the
-compiled class files for the modules being compiled.
+\f[B]\f[BC]\-\-module\-source\-path\f[B]\f[R] must also be used, so that
+the output directory is organized in a module hierarchy, and capable of
+holding the compiled class files for the modules being compiled.
 .SH ANNOTATION PROCESSING
 .PP
 The \f[CB]javac\f[R] command provides direct support for annotation
@@ -1744,11 +1756,11 @@
 packages and subpackages.
 .SS How Annotation Processing Works
 .PP
-Unless annotation processing is disabled with the \f[CB]\-proc:none\f[R]
-option, the compiler searches for any annotation processors that are
-available.
-The search path can be specified with the \f[CB]\-processorpath\f[R]
-option.
+Unless annotation processing is disabled with the
+\f[B]\f[BC]\-proc:none\f[B]\f[R] option, the compiler searches for any
+annotation processors that are available.
+The search path can be specified with the
+\f[B]\f[BC]\-processorpath\f[B]\f[R] option.
 If no path is specified, then the user class path is used.
 Processors are located by means of service provider\-configuration files
 named \f[CB]META\-INF/services/javax.annotation.processing\f[R].
@@ -1756,7 +1768,7 @@
 Such files should contain the names of any annotation processors to be
 used, listed one per line.
 Alternatively, processors can be specified explicitly, using the
-\f[CB]\-processor\f[R] option.
+\f[B]\f[BC]\-processor\f[B]\f[R] option.
 .PP
 After scanning the source files and classes on the command line to
 determine what annotations are present, the compiler queries the
@@ -1777,15 +1789,15 @@
 After a round occurs where no new source files are generated, the
 annotation processors are called one last time, to give them a chance to
 complete any remaining work.
-Finally, unless the \f[CB]\-proc:only\f[R] option is used, the compiler
-compiles the original and all generated source files.
+Finally, unless the \f[B]\f[BC]\-proc:only\f[B]\f[R] option is used, the
+compiler compiles the original and all generated source files.
 .PP
 If you use an annotation processor that generates additional source
 files to be included in the compilation, you can specify a default
 module to be used for the newly generated files, for use when a module
 declaration is not also generated.
-In this case, use the \f[CB]\-\-default\-module\-for\-created\-files\f[R]
-option.
+In this case, use the
+\f[B]\f[BC]\-\-default\-module\-for\-created\-files\f[B]\f[R] option.
 .SS Compilation Environment and Runtime Environment.
 .PP
 The declarations in source files and previously compiled class files are
@@ -1807,18 +1819,17 @@
 If an annotation processor has dependencies on libraries that are not in
 modules, the libraries can be placed, along with the annotation
 processor itself, on the processor path.
-(See the \f[CB]\-\-processor\-path\f[R] option.) If the annotation
-processor and its dependencies are in modules, you should use the
-processor module path instead.
-(See the \f[CB]\-\-processor\-module\-path\f[R] option.) When those are
-insufficient, it may be necessary to provide further configuration of
-the runtime environment.
+(See the \f[B]\f[BC]\-\-processor\-path\f[B]\f[R] option.) If the
+annotation processor and its dependencies are in modules, you should use
+the processor module path instead.
+(See the \f[B]\f[BC]\-\-processor\-module\-path\f[B]\f[R] option.) When
+those are insufficient, it may be necessary to provide further
+configuration of the runtime environment.
 This can be done in two ways:
 .IP "1." 3
 If \f[CB]javac\f[R] is invoked from the command line, options can be
 passed to the underlying runtime by prefixing the option with
-\f[CB]\-J\f[R].
-(See the \f[CB]\-J\f[R] option.)
+\f[B]\f[BC]\-J\f[B]\f[R].
 .IP "2." 3
 You can start an instance of a Java Virtual Machine directly and use
 command line options and API to configure an environment in which
@@ -1826,10 +1837,10 @@
 .SH COMPILING FOR EARLIER RELEASES OF THE PLATFORM
 .PP
 \f[CB]javac\f[R] can compile code that is to be used on other releases of
-the platform, using either the \f[CB]\-\-release\f[R] option, or the
-\f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] and
-\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, together with additional
-options to specify the platform classes.
+the platform, using either the \f[B]\f[BC]\-\-release\f[B]\f[R] option,
+or the \f[B]\f[BC]\-\-source\f[B]\f[R]/\f[CB]\-source\f[R] and
+\f[B]\f[BC]\-\-target\f[B]\f[R]/\f[CB]\-target\f[R] options, together with
+additional options to specify the platform classes.
 .PP
 Depending on the desired platform release, there are some restrictions
 on some of the options that can be used.
@@ -1839,11 +1850,14 @@
 This includes all of the following options:
 .RS 2
 .IP \[bu] 2
-\f[CB]\-\-module\-source\-path\f[R], \f[CB]\-\-upgrade\-module\-path\f[R],
-\f[CB]\-\-system\f[R], \f[CB]\-\-module\-path\f[R],
-\f[CB]\-\-add\-modules\f[R], \f[CB]\-\-add\-exports\f[R],
-\f[CB]\-\-add\-opens\f[R], \f[CB]\-\-add\-reads\f[R],
-\f[CB]\-\-limit\-modules\f[R], \f[CB]\-\-patch\-module\f[R]
+\f[B]\f[BC]\-\-module\-source\-path\f[B]\f[R],
+\f[B]\f[BC]\-\-upgrade\-module\-path\f[B]\f[R],
+\f[B]\f[BC]\-\-system\f[B]\f[R], \f[B]\f[BC]\-\-module\-path\f[B]\f[R],
+\f[B]\f[BC]\-\-add\-modules\f[B]\f[R],
+\f[B]\f[BC]\-\-add\-exports\f[B]\f[R], \f[CB]\-\-add\-opens\f[R],
+\f[B]\f[BC]\-\-add\-reads\f[B]\f[R],
+\f[B]\f[BC]\-\-limit\-modules\f[B]\f[R],
+\f[B]\f[BC]\-\-patch\-module\f[B]\f[R]
 .PP
 If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the
@@ -1856,10 +1870,13 @@
 This includes all of the following options:
 .RS 2
 .IP \[bu] 2
-\f[CB]\-Xbootclasspath/p:\f[R], \f[CB]\-Xbootclasspath\f[R],
-\f[CB]\-Xbootclasspath/a:\f[R], \f[CB]\-endorseddirs\f[R],
-\f[CB]\-Djava.endorsed.dirs\f[R], \f[CB]\-extdirs\f[R],
-\f[CB]\-Djava.ext.dirs\f[R], \f[CB]\-profile\f[R]
+\f[B]\f[BC]\-Xbootclasspath/p:\f[B]\f[R],
+\f[B]\f[BC]\-Xbootclasspath\f[B]\f[R],
+\f[B]\f[BC]\-Xbootclasspath/a:\f[B]\f[R],
+\f[B]\f[BC]\-endorseddirs\f[B]\f[R],
+\f[B]\f[BC]\-Djava.endorsed.dirs\f[B]\f[R],
+\f[B]\f[BC]\-extdirs\f[B]\f[R], \f[B]\f[BC]\-Djava.ext.dirs\f[B]\f[R],
+\f[B]\f[BC]\-profile\f[B]\f[R]
 .PP
 If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the
--- a/src/jdk.compiler/share/man/serialver.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.compiler/share/man/serialver.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "SERIALVER" "1" "2018" "JDK 13" "JDK Commands"
+.TH "SERIALVER" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11gcm2.h	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11gcm2.h	Wed Jan 15 01:54:35 2020 +0000
@@ -1,10 +1,12 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
  *
  * This code is distributed in the hope that it will be useful, but WITHOUT
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
--- a/src/jdk.hotspot.agent/share/man/jhsdb.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.hotspot.agent/share/man/jhsdb.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JHSDB" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JHSDB" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -34,28 +34,33 @@
 \f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
 \f[I]coredump\f[R]]
 .PP
-\f[CB]jhsdb\f[R] \f[CB]debugd\f[R] [\f[I]options\f[R]] (\f[I]pid\f[R] |
-\f[I]executable\f[R] \f[I]coredump\f[R]) [\f[I]server\-id\f[R]]
-.PP
 \f[CB]jhsdb\f[R] \f[CB]hsdb\f[R] [\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
 \f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
 \f[I]coredump\f[R]]
 .PP
-\f[CB]jhsdb\f[R] \f[CB]jstack\f[R] [\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
+\f[CB]jhsdb\f[R] \f[CB]debugd\f[R] (\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
 \f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
-\f[I]coredump\f[R]] [\f[I]options\f[R]]
+\f[I]coredump\f[R]) [\f[I]options\f[R]]
 .PP
-\f[CB]jhsdb\f[R] \f[CB]jmap\f[R] [\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
-\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
-\f[I]coredump\f[R]] [\f[I]options\f[R]]
+\f[CB]jhsdb\f[R] \f[CB]jstack\f[R] (\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
+\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R] \f[I]coredump\f[R]
+| \f[CB]\-\-connect\f[R] \f[I][server\-id\@]debugd\-host\f[R])
+[\f[I]options\f[R]]
 .PP
-\f[CB]jhsdb\f[R] \f[CB]jinfo\f[R] [\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
-\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
-\f[I]coredump\f[R]] [\f[I]options\f[R]]
+\f[CB]jhsdb\f[R] \f[CB]jmap\f[R] (\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
+\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R] \f[I]coredump\f[R]
+| \f[CB]\-\-connect\f[R] \f[I][server\-id\@]debugd\-host\f[R])
+[\f[I]options\f[R]]
 .PP
-\f[CB]jhsdb\f[R] \f[CB]jsnap\f[R] [\f[I]options\f[R]] [\f[CB]\-\-pid\f[R]
-\f[I]pid\f[R] | \f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R]
-\f[I]coredump\f[R]]
+\f[CB]jhsdb\f[R] \f[CB]jinfo\f[R] (\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
+\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R] \f[I]coredump\f[R]
+| \f[CB]\-\-connect\f[R] \f[I][server\-id\@]debugd\-host\f[R])
+[\f[I]options\f[R]]
+.PP
+\f[CB]jhsdb\f[R] \f[CB]jsnap\f[R] (\f[CB]\-\-pid\f[R] \f[I]pid\f[R] |
+\f[CB]\-\-exe\f[R] \f[I]executable\f[R] \f[CB]\-\-core\f[R] \f[I]coredump\f[R]
+| \f[CB]\-\-connect\f[R] \f[I][server\-id\@]debugd\-host\f[R])
+[\f[I]options\f[R]]
 .TP
 .B \f[I]pid\f[R]
 The process ID to which the \f[CB]jhsdb\f[R] tool should attach.
@@ -74,12 +79,6 @@
 the PID of the JVM.
 .RE
 .TP
-.B \f[I]server\-id\f[R]
-An optional unique ID to use when multiple debug servers are running on
-the same remote host.
-.RS
-.RE
-.TP
 .B \f[I]executable\f[R]
 The Java executable file from which the core dump was produced.
 .RS
@@ -90,19 +89,26 @@
 .RS
 .RE
 .TP
+.B \f[I][server\-id\@]debugd\-host\f[R]
+An optional server ID and the address of the remote debug server
+(debugd).
+.RS
+.RE
+.TP
 .B \f[I]options\f[R]
 The command\-line options for a \f[CB]jhsdb\f[R] mode.
-See \f[B]Common Options for jhsdb Modes\f[R], \f[B]Options for the debugd
-Mode\f[R], \f[B]Options for the jinfo Mode\f[R], \f[B]Options for the jmap
-Mode\f[R], \f[B]Options for the jmap Mode\f[R], \f[B]Options for the
-jstack Mode\f[R], and \f[B]Options for the jsnap Mode\f[R].
+See \f[B]Options for the debugd Mode\f[R], \f[B]Options for the jstack
+Mode\f[R], \f[B]Options for the jmap Mode\f[R], \f[B]Options for the jinfo
+Mode\f[R], and \f[B]Options for the jsnap Mode\f[R].
 .RS
 .RE
 .PP
 \f[B]Note:\f[R]
 .PP
 Either the \f[I]pid\f[R] or the pair of \f[I]executable\f[R] and
-\f[I]core\f[R] files must be provided.
+\f[I]core\f[R] files or the \f[I][server\-id\@]debugd\-host\f[R] must be
+provided for \f[CB]debugd\f[R], \f[CB]jstack\f[R], \f[CB]jmap\f[R],
+\f[CB]jinfo\f[R] and \f[CB]jsnap\f[R] modes.
 .SH DESCRIPTION
 .PP
 You can use the \f[CB]jhsdb\f[R] tool to attach to a Java process or to
@@ -124,13 +130,13 @@
 .RS
 .RE
 .TP
-.B \f[CB]jhsdb\ debugd\f[R]
-Starts the remote debug server.
+.B \f[CB]jhsdb\ hsdb\f[R]
+Starts the interactive GUI debugger.
 .RS
 .RE
 .TP
-.B \f[CB]jhsdb\ hsdb\f[R]
-Starts the interactive GUI debugger.
+.B \f[CB]jhsdb\ debugd\f[R]
+Starts the remote debug server.
 .RS
 .RE
 .TP
@@ -153,44 +159,19 @@
 Prints performance counter information.
 .RS
 .RE
-.SH COMMON OPTIONS FOR JHSDB MODES
-.PP
-In addition to any required \f[CB]jstack\f[R], \f[CB]jmap\f[R],
-\f[CB]jinfo\f[R] or \f[CB]jsnap\f[R] mode specific options, the
-\f[CB]pid\f[R], \f[CB]exe\f[R], or \f[CB]core\f[R] options must be provided
-for all modes.
-The following options are available for all modes.
 .TP
-.B \f[CB]\-\-pid\f[R]
-The process ID of the hanging process.
-.RS
-.RE
-.TP
-.B \f[CB]\-\-exe\f[R]
-The executable file name.
-.RS
-.RE
-.TP
-.B \f[CB]\-\-core\f[R]
-The core dump file name.
-.RS
-.RE
-.TP
-.B \f[CB]\-\-help\f[R]
-Displays the options available for the command.
+.B \f[CB]jhsdb\f[R] \f[I]command\f[R] \f[CB]\-\-help\f[R]
+Displays the options available for the \f[I]command\f[R].
 .RS
 .RE
 .SH OPTIONS FOR THE DEBUGD MODE
 .TP
-.B \f[I]server\-id\f[R]
+.B \f[CB]\-\-serverid\f[R] \f[I]server\-id\f[R]
 An optional unique ID for this debug server.
 This is required if multiple debug servers are run on the same machine.
 .RS
 .RE
 .SH OPTIONS FOR THE JINFO MODE
-.PP
-Without specified options, the \f[CB]jhsdb\ jinfo\f[R] prints both flags
-and properties.
 .TP
 .B \f[CB]\-\-flags\f[R]
 Prints the VM flags.
@@ -207,10 +188,6 @@
 .RS
 .RE
 .SH OPTIONS FOR THE JMAP MODE
-.PP
-In addition to the following mode specific options, the \f[CB]pid\f[R],
-\f[CB]exe\f[R], or \f[CB]core\f[R] options described in \f[B]Common Options
-for jhsdb Modes\f[R] must be provided.
 .TP
 .B no option
 Prints the same information as Solaris \f[CB]pmap\f[R].
@@ -227,8 +204,8 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-\-dumpfile\f[R]
-Prints the name of the dumpfile.
+.B \f[CB]\-\-dumpfile\f[R] \f[I]name\f[R]
+The name of the dumpfile.
 .RS
 .RE
 .TP
@@ -247,10 +224,6 @@
 .RS
 .RE
 .SH OPTIONS FOR THE JSTACK MODE
-.PP
-In addition to the following mode specific options, the \f[CB]pid\f[R],
-\f[CB]exe\f[R], or \f[CB]core\f[R] options described in \f[B]Common Options
-for jhsdb Modes\f[R] must be provided.
 .TP
 .B \f[CB]\-\-locks\f[R]
 Prints the \f[CB]java.util.concurrent\f[R] locks information.
@@ -263,10 +236,6 @@
 .RS
 .RE
 .SH OPTIONS FOR THE JSNAP MODE
-.PP
-In addition to the following mode specific option, the \f[CB]pid\f[R],
-\f[CB]exe\f[R], or \f[CB]core\f[R] options described in \f[B]Common Options
-for jhsdb Modes\f[R] must be provided.
 .TP
 .B \f[CB]\-\-all\f[R]
 Prints all performance counters.
--- a/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/AbstractLayout.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/AbstractLayout.java	Wed Jan 15 01:54:35 2020 +0000
@@ -140,7 +140,7 @@
 
     /*** Helper constants for implementing Layout::describeConstable ***/
 
-    public static final DirectMethodHandleDesc BSM_GET_STATIC_FINAL
+    static final DirectMethodHandleDesc BSM_GET_STATIC_FINAL
             = ConstantDescs.ofConstantBootstrap(ConstantDescs.CD_ConstantBootstraps, "getStaticFinal",
             ConstantDescs.CD_Object, ConstantDescs.CD_Class);
 
--- a/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemoryAddress.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemoryAddress.java	Wed Jan 15 01:54:35 2020 +0000
@@ -74,7 +74,13 @@
 
     /**
      * Compares the specified object with this address for equality. Returns {@code true} if and only if the specified
-     * object is also a address, and it is equal to this address.
+     * object is also an address, and it refers to the same memory location as this address.
+     *
+     * @apiNote two addresses might be considered equal despite their associated segments differ. This
+     * can happen, for instance, if the segment associated with one address is a <em>slice</em>
+     * (see {@link MemorySegment#asSlice(long, long)}) of the segment associated with the other address. Moreover,
+     * two addresses might be considered equals despite differences in the temporal bounds associated with their
+     * corresponding segments (this is possible, for example, as a result of calls to {@link MemorySegment#acquire()}).
      *
      * @param that the object to be compared for equality with this address.
      * @return {@code true} if the specified object is equal to this address.
--- a/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemoryLayout.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemoryLayout.java	Wed Jan 15 01:54:35 2020 +0000
@@ -55,14 +55,14 @@
  * <p>
  * Non-platform classes should not implement {@linkplain MemoryLayout} directly.
  *
- * <h2>Size, alignment and byte order</h2>
+ * <h2><a id = "layout-align">Size, alignment and byte order</a></h2>
  *
  * All layouts have a size; layout size for value and padding layouts is always explicitly denoted; this means that a layout description
  * always has the same size in bits, regardless of the platform in which it is used. For derived layouts, the size is computed
  * as follows:
  * <ul>
  *     <li>for a <em>finite</em> sequence layout <em>S</em> whose element layout is <em>E</em> and size is L,
- *     the size of <em>S</em> is that of <em>E, multiplied by L</em></li>
+ *     the size of <em>S</em> is that of <em>E</em>, multiplied by <em>L</em></li>
  *     <li>the size of an <em>unbounded</em> sequence layout is <em>unknown</em></li>
  *     <li>for a group layout <em>G</em> with member layouts <em>M1</em>, <em>M2</em>, ... <em>Mn</em> whose sizes are
  *     <em>S1</em>, <em>S2</em>, ... <em>Sn</em>, respectively, the size of <em>G</em> is either <em>S1 + S2 + ... + Sn</em> or
@@ -180,6 +180,9 @@
      * <li>{@code A=512} is the most strict alignment required by the x86/SV ABI (for AVX-512 data).</li>
      * </ul>
      *
+     * If no explicit alignment constraint was set on this layout (see {@link #withBitAlignment(long)}),
+     * then this method returns the <a href="#layout-align">natural alignment</a> constraint (in bits) associated with this layout.
+     *
      * @return the layout alignment constraint, in bits.
      */
     long bitAlignment();
@@ -195,6 +198,9 @@
      * <li>{@code A=64} is the most strict alignment required by the x86/SV ABI (for AVX-512 data).</li>
      * </ul>
      *
+     * If no explicit alignment constraint was set on this layout (see {@link #withBitAlignment(long)}),
+     * then this method returns the <a href="#layout-align">natural alignment</a> constraint (in bytes) associated with this layout.
+     *
      * @return the layout alignment constraint, in bytes.
      * @throws UnsupportedOperationException if {@code bitAlignment()} is not a multiple of 8.
      */
@@ -352,7 +358,16 @@
 
     /**
      * Compares the specified object with this layout for equality. Returns {@code true} if and only if the specified
-     * object is also a layout, and it is equal to this layout.
+     * object is also a layout, and it is equal to this layout. Two layouts are considered equal if they are of
+     * the same kind, have the same size, name and alignment constraints. Furthermore, depending on the layout kind, additional
+     * conditions must be satisfied:
+     * <ul>
+     *     <li>two value layouts are considered equal if they have the same endianness (see {@link ValueLayout#order()})</li>
+     *     <li>two sequence layouts are considered equal if they have the same element count (see {@link SequenceLayout#elementCount()}), and
+     *     if their element layouts (see {@link SequenceLayout#elementLayout()}) are also equal</li>
+     *     <li>two group layouts are considered equal if they are of the same kind (see {@link GroupLayout#isStruct()},
+     *     {@link GroupLayout#isUnion()}) and if their member layouts (see {@link GroupLayout#memberLayouts()}) are also equal</li>
+     * </ul>
      *
      * @param that the object to be compared for equality with this layout.
      * @return {@code true} if the specified object is equal to this layout.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.incubator.jpackage/share/man/jpackage.1	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,483 @@
+.\" Copyright (c) 1994, 2019, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code is distributed in the hope that it will be useful, but WITHOUT
+.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Automatically generated by Pandoc 2.3.1
+.\"
+.TH "JPACKAGE" "1" "2019" "JDK 14" "JDK Commands"
+.hy
+.SH NAME
+.PP
+jpackage \- tool for packaging self\-contained Java applications.
+.SH SYNOPSIS
+.PP
+\f[CB]jpackage\f[R] [\f[I]options\f[R]]
+.TP
+.B \f[I]options\f[R]
+Command\-line options separated by spaces.
+See \f[B]jpackage Options\f[R].
+.RS
+.RE
+.SH DESCRIPTION
+.PP
+The \f[CB]jpackage\f[R] tool will take as input a Java application and a
+Java run\-time image, and produce a Java application image that includes
+all the necessary dependencies.
+It will be able to produce a native package in a platform\-specific
+format, such as an exe on Windows or a dmg on macOS.
+Each format must be built on the platform it runs on, there is no
+cross\-platform support.
+The tool will have options that allow packaged applications to be
+customized in various ways.
+.SH JPACKAGE OPTIONS
+.SS Generic Options:
+.TP
+.B \f[CB]\@\f[R]\f[I]filename\f[R]
+Read options and/or mode from a file.
+.RS
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-type\f[R] or \f[CB]\-t\f[R] \f[I]type string\f[R]
+The type of package to create
+.RS
+.PP
+Valid values are: {"app\-image", "exe", "msi", "rpm", "deb", "pkg",
+"dmg"}
+.PP
+If this option is not specified a platform dependent default type will
+be created.
+.RE
+.TP
+.B \f[CB]\-\-app\-version\f[R] \f[I]version\f[R]
+Version of the application and/or package`
+.RS
+.RE
+.TP
+.B \f[CB]\-\-copyright\f[R] \f[I]copyright string\f[R]
+Copyright for the application.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-description\f[R] \f[I]description string\f[R]
+Description of the application.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-help\f[R] or \f[CB]\-h\f[R]
+Print the usage text with a list and description of each valid option
+for the current platform to the output stream, and exit.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-name\f[R] or \f[CB]\-n\f[R] \f[I]name\f[R]
+Name of the application and/or package.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-dest\f[R] or \f[CB]\-d\f[R] \f[I]output path\f[R]
+Path where generated output file is placed
+.RS
+.PP
+Defaults to the current working directory.
+(absolute path or relative to the current directory).
+.RE
+.TP
+.B \f[CB]\-\-temp\f[R] \f[I]file path\f[R]
+Path of a new or empty directory used to create temporary files
+(absolute path or relative to the current directory).
+.RS
+.PP
+If specified, the temp dir will not be removed upon the task completion
+and must be removed manually.
+.PP
+If not specified, a temporary directory will be created and removed upon
+the task completion.
+.RE
+.TP
+.B \f[CB]\-\-vendor\f[R] \f[I]vendor string\f[R]
+Vendor of the application.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-verbose\f[R]
+Enables verbose output.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-version\f[R]
+Print the product version to the output stream and exit.
+.RS
+.RE
+.SS Options for creating the runtime image:
+.TP
+.B \f[CB]\-\-add\-modules\f[R] \f[I]module name\f[R] [\f[CB],\f[R]\f[I]module name\f[R]...]
+A comma (",") separated list of modules to add.
+.RS
+.PP
+This module list, along with the main module (if specified) will be
+passed to jlink as the \-\-add\-module argument.
+If not specified, either just the main module (if \-\-module is
+specified), or the default set of modules (if \-\-main\-jar is
+specified) are used.
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-module\-path\f[R] or \f[CB]\-p\f[R] \f[I]module path\f[R]...
+A File.pathSeparator separated list of paths.
+.RS
+.PP
+Each path is either a directory of modules or the path to a modular jar,
+and is absolute or relative to the current directory.
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-bind\-services\f[R]
+Pass on \-\-bind\-services option to jlink (which will link in service
+provider modules and their dependences).
+.RS
+.RE
+.TP
+.B \f[CB]\-\-runtime\-image\f[R] \f[I]file path\f[R]
+Path of the predefined runtime image that will be copied into the
+application image (absolute path or relative to the current directory).
+.RS
+.PP
+If \-\-runtime\-image is not specified, jpackage will run jlink to
+create the runtime image using options: \-\-strip\-debug,
+\-\-no\-header\-files, \-\-no\-man\-pages, and
+\-\-strip\-native\-commands.
+.RE
+.SS Options for creating the application image:
+.TP
+.B \f[CB]\-\-icon\f[R] \f[I]icon file path\f[R]
+Path of the icon of the application bundle (absolute path or relative to
+the current directory).
+.RS
+.RE
+.TP
+.B \f[CB]\-\-input\f[R] or \f[CB]\-i\f[R] \f[I]input path\f[R]
+Path of the input directory that contains the files to be packaged
+(absolute path or relative to the current directory).
+.RS
+.PP
+All files in the input directory will be packaged into the application
+image.
+.RE
+.SS Options for creating the application launcher(s):
+.TP
+.B \f[CB]\-\-add\-launcher\f[R] \f[I]launcher name\f[R]=\f[I]file path\f[R]
+Name of launcher, and a path to a Properties file that contains a list
+of key, value pairs (absolute path or relative to the current
+directory).
+.RS
+.PP
+The keys "module", "add\-modules", "main\-jar", "main\-class",
+"arguments", "java\-options", "app\-version", "icon", and "win\-console"
+can be used.
+.PP
+These options are added to, or used to overwrite, the original command
+line options to build an additional alternative launcher.
+The main application launcher will be built from the command line
+options.
+Additional alternative launchers can be built using this option, and
+this option can be used multiple times to build multiple additional
+launchers.
+.RE
+.TP
+.B \f[CB]\-\-arguments\f[R] \f[I]main class arguments\f[R]
+Command line arguments to pass to the main class if no command line
+arguments are given to the launcher.
+.RS
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-java\-options\f[R] \f[I]java options\f[R]
+Options to pass to the Java runtime.
+.RS
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-main\-class\f[R] \f[I]class name\f[R]
+Qualified name of the application main class to execute.
+.RS
+.PP
+This option can only be used if \-\-main\-jar is specified.
+.RE
+.TP
+.B \f[CB]\-\-main\-jar\f[R] \f[I]main jar file\f[R]
+The main JAR of the application; containing the main class (specified as
+a path relative to the input path).
+.RS
+.PP
+Either \-\-module or \-\-main\-jar option can be specified but not both.
+.RE
+.TP
+.B \f[CB]\-\-module\f[R] or \f[CB]\-m\f[R] \f[I]module name\f[R]/\f[I]main class\f[R]]
+The main module (and optionally main class) of the application This
+module must be located on the module path.
+.RS
+.PP
+When this option is specified, the main module will be linked in the
+Java runtime image.
+Either \-\-module or \-\-main\-jar option can be specified but not both.
+.RE
+.SS Platform dependent option for creating the application launcher:
+.SS Windows platform options (available only when running on Windows):
+.TP
+.B \f[CB]\-\-win\-console\f[R]
+Creates a console launcher for the application, should be specified for
+application which requires console interactions
+.RS
+.RE
+.SS macOS platform options (available only when running on macOS):
+.TP
+.B \f[CB]\-\-mac\-package\-identifier\f[R] \f[I]ID string\f[R]
+An identifier that uniquely identifies the application for macOSX.
+.RS
+.PP
+Defaults to the the main class name.
+.PP
+May only use alphanumeric (A\-Z,a\-z,0\-9), hyphen (\-), and period (.)
+characters.
+.RE
+.TP
+.B \f[CB]\-\-mac\-package\-name\f[R] \f[I]name string\f[R]
+Name of the application as it appears in the Menu Bar.
+.RS
+.PP
+This can be different from the application name.
+.PP
+This name must be less than 16 characters long and be suitable for
+displaying in the menu bar and the application Info window.
+Defaults to the application name.
+.RE
+.TP
+.B \f[CB]\-\-mac\-bundle\-signing\-prefix\f[R] \f[I]prefix string\f[R]
+When signing the application bundle, this value is prefixed to all
+components that need to be signed that don\[aq]t have an existing bundle
+identifier.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-mac\-sign\f[R]
+Request that the bundle be signed.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-mac\-signing\-keychain\f[R] \f[I]file path\f[R]
+Path of the keychain to search for the signing identity (absolute path
+or relative to the current directory).
+.RS
+.PP
+If not specified, the standard keychains are used.
+.RE
+.TP
+.B \f[CB]\-\-mac\-signing\-key\-user\-name\f[R] \f[I]team name\f[R]
+Team name portion in Apple signing identities\[aq] names.
+.RS
+.PP
+For example "Developer ID Application: "
+.RE
+.SS Options for creating the application package:
+.TP
+.B \f[CB]\-\-app\-image\f[R] \f[I]file path\f[R]
+Location of the predefined application image that is used to build an
+installable package (absolute path or relative to the current
+directory).
+.RS
+.PP
+See create\-app\-image mode options to create the application image.
+.RE
+.TP
+.B \f[CB]\-\-file\-associations\f[R] \f[I]file path\f[R]
+Path to a Properties file that contains list of key, value pairs
+(absolute path or relative to the current directory).
+.RS
+.PP
+The keys "extension", "mime\-type", "icon", and "description" can be
+used to describe the association.
+.PP
+This option can be used multiple times.
+.RE
+.TP
+.B \f[CB]\-\-install\-dir\f[R] \f[I]file path\f[R]
+Absolute path of the installation directory of the application on OS X
+or Linux.
+Relative sub\-path of the installation location of the application such
+as "Program Files" or "AppData" on Windows.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-license\-file\f[R] \f[I]file path\f[R]
+Path to the license file (absolute path or relative to the current
+directory).
+.RS
+.RE
+.TP
+.B \f[CB]\-\-resource\-dir\f[R] \f[I]path\f[R]
+Path to override jpackage resources (absolute path or relative to the
+current directory).
+.RS
+.PP
+Icons, template files, and other resources of jpackage can be
+over\-ridden by adding replacement resources to this directory.
+.RE
+.TP
+.B \f[CB]\-\-runtime\-image\f[R] \f[I]file\-path\f[R]
+Path of the predefined runtime image to install (absolute path or
+relative to the current directory).
+.RS
+.PP
+Option is required when creating a runtime installer.
+.RE
+.SS Platform dependent options for creating the application package:
+.SS Windows platform options (available only when running on Windows):
+.TP
+.B \f[CB]\-\-win\-dir\-chooser\f[R]
+Adds a dialog to enable the user to choose a directory in which the
+product is installed.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-win\-menu\f[R]
+Adds the application to the system menu.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-win\-menu\-group\f[R] \f[I]menu group name\f[R]
+Start Menu group this application is placed in.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-win\-per\-user\-install\f[R]
+Request to perform an install on a per\-user basis.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-win\-shortcut\f[R]
+Creates a desktop shortcut for the application.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-win\-upgrade\-uuid\f[R] \f[I]id string\f[R]
+UUID associated with upgrades for this package.
+.RS
+.RE
+.SS Linux platform options (available only when running on Linux):
+.TP
+.B \f[CB]\-\-linux\-package\-name\f[R] \f[I]package name\f[R]
+Name for Linux package, defaults to the application name.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-deb\-maintainer\f[R] \f[I]email address\f[R]
+Maintainer for .deb bundle.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-menu\-group\f[R] \f[I]menu\-group\-name\f[R]
+Menu group this application is placed in.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-package\-deps\f[R]
+Required packages or capabilities for the application
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-rpm\-license\-type\f[R] \f[I]type string\f[R]
+Type of the license ("License: " of the RPM .spec).
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-app\-release\f[R] \f[I]release string\f[R]
+Release value of the RPM .spec file or Debian revision value of the DEB
+control file.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-app\-category\f[R] \f[I]category string\f[R]
+Group value of the RPM .spec file or Section value of DEB control file.
+.RS
+.RE
+.TP
+.B \f[CB]\-\-linux\-shortcut\f[R]
+Creates a shortcut for the application
+.RS
+.RE
+.SH JPACKAGE EXAMPLES
+.IP
+.nf
+\f[CB]
+Generate\ an\ application\ package\ suitable\ for\ the\ host\ system:
+\f[R]
+.fi
+.IP
+.nf
+\f[CB]
+For\ a\ modular\ application:
+\ \ \ \ jpackage\ \-n\ name\ \-p\ modulePath\ \-m\ moduleName/className
+For\ a\ non\-modular\ application:
+\ \ \ \ jpackage\ \-i\ inputDir\ \-n\ name\ \\
+\ \ \ \ \ \ \ \ \-\-main\-class\ className\ \-\-main\-jar\ myJar.jar
+From\ a\ pre\-built\ application\ image:
+\ \ \ \ jpackage\ \-n\ name\ \-\-app\-image\ appImageDir
+\f[R]
+.fi
+.IP
+.nf
+\f[CB]
+Generate\ an\ application\ image:
+\f[R]
+.fi
+.IP
+.nf
+\f[CB]
+For\ a\ modular\ application:
+\ \ \ \ jpackage\ \-\-type\ app\-image\ \-n\ name\ \-p\ modulePath\ \\
+\ \ \ \ \ \ \ \ \-m\ moduleName/className
+For\ a\ non\-modular\ application:
+\ \ \ \ jpackage\ \-\-type\ app\-image\ \-i\ inputDir\ \-n\ name\ \\
+\ \ \ \ \ \ \ \ \-\-main\-class\ className\ \-\-main\-jar\ myJar.jar
+To\ provide\ your\ own\ options\ to\ jlink,\ run\ jlink\ separately:
+\ \ \ \ jlink\ \-\-output\ appRuntimeImage\ \-p\ modulePath\ \-m\ moduleName\ \\
+\ \ \ \ \ \ \ \ \-\-no\-header\-files\ [<additional\ jlink\ options>...]
+\ \ \ \ jpackage\ \-\-type\ app\-image\ \-n\ name\ \\
+\ \ \ \ \ \ \ \ \-m\ moduleName/className\ \-\-runtime\-image\ appRuntimeImage
+\f[R]
+.fi
+.IP
+.nf
+\f[CB]
+Generate\ a\ Java\ runtime\ package:
+\f[R]
+.fi
+.IP
+.nf
+\f[CB]
+jpackage\ \-n\ name\ \-\-runtime\-image\ <runtime\-image>
+\f[R]
+.fi
--- a/src/jdk.incubator.jpackage/windows/native/libjpackage/WindowsRegistry.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.incubator.jpackage/windows/native/libjpackage/WindowsRegistry.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -24,8 +24,8 @@
  */
 
 #include <Windows.h>
+#include <tchar.h>
 #include <strsafe.h>
-#include <tchar.h>
 #include <jni.h>
 
 #include "Utils.h"
--- a/src/jdk.jartool/share/man/jar.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jartool/share/man/jar.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAR" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JAR" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jartool/share/man/jarsigner.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jartool/share/man/jarsigner.1	Wed Jan 15 01:54:35 2020 +0000
@@ -8,7 +8,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -22,7 +22,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JARSIGNER" "1" "2019" "JDK 13" "JDK Commands"
+.TH "JARSIGNER" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -309,7 +309,7 @@
 SHA256withDSA
 T}
 T{
-RSA \ \ \ 
+RSA
 T}@T{
 <= 3072
 T}@T{
--- a/src/jdk.javadoc/share/man/javadoc.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.javadoc/share/man/javadoc.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAVADOC" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JAVADOC" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -173,7 +173,8 @@
 question mark, or exclamation point followed by a space when the next
 word starts with a capital letter.
 This is meant to handle most abbreviations (such as "The serial no.
-is valid", but will not handle "Mr.\ Smith").
+is valid", but will not handle "Mr.
+Smith").
 The \f[CB]\-breakiterator\f[R] option doesn\[aq]t stop at HTML tags or
 sentences that begin with numbers or symbols.
 The algorithm stops at the last period in \f[CB]\&../filename\f[R], even
--- a/src/jdk.jcmd/share/man/jcmd.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jcmd.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JCMD" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JCMD" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -89,7 +89,7 @@
 .RE
 .TP
 .B \f[CB]\-h\f[R]
-Displays the\f[CB]jcmd\f[R] utility\[aq]s command\-line help.
+Displays the \f[CB]jcmd\f[R] utility\[aq]s command\-line help.
 .RS
 .RE
 .SH DESCRIPTION
@@ -249,7 +249,7 @@
 .RE
 .TP
 .B \f[CB]GC.class_stats\f[R] [\f[I]options\f[R]] [\f[I]arguments\f[R]]
-Provide statistics about Java class meta data.
+(Deprecated) Provide statistics about Java class meta data.
 .RS
 .PP
 Impact: High \-\-\- depends on Java heap size and content.
@@ -357,38 +357,286 @@
 .RE
 .TP
 .B \f[CB]JFR.check\f[R] [\f[I]options\f[R]]
-See \f[B]JFR.check\f[R]
-[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JFRCR\-GUID\-DA391CC1\-B5D8\-44F1\-AEDD\-9A534C8DD009]
-in the Java Flight Recorder Command Reference.
+Show information about a running flight recording
 .RS
+.PP
+Impact: Low
+.PP
+\f[B]Note:\f[R]
+.PP
+The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or
+\f[I]key\f[R]\f[CB]=\f[R]\f[I]value\f[R] syntax.
+If no parameters are entered, information for all active recordings is
+shown.
+.PP
+\f[I]options\f[R]:
+.IP \[bu] 2
+\f[CB]name\f[R]: (Optional) Name of the flight recording.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]verbose\f[R]: (Optional) Flag for printing the event settings for
+the recording (BOOLEAN, false)
 .RE
 .TP
 .B \f[CB]JFR.configure\f[R] [\f[I]options\f[R]]
-See \f[B]JFR.configure\f[R]
-[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JFRCR\-GUID\-737D234E\-FD69\-4E8E\-A9F7\-06AE073648DD]
-in the Java Flight Recorder Command Reference.
+Set the parameters for a flight recording
 .RS
+.PP
+Impact: Low
+.PP
+\f[B]Note:\f[R]
+.PP
+The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or
+\f[I]key\f[R]\f[CB]=\f[R]\f[I]value\f[R] syntax.
+If no parameters are entered, the current settings are displayed.
+.PP
+\f[I]options\f[R]:
+.IP \[bu] 2
+\f[CB]globalbuffercount\f[R]: (Optional) Number of global buffers.
+This option is a legacy option: change the \f[CB]memorysize\f[R] parameter
+to alter the number of global buffers.
+This value cannot be changed once JFR has been initalized.
+(STRING, default determined by the value for \f[CB]memorysize\f[R])
+.IP \[bu] 2
+\f[CB]globalbuffersize\f[R]: (Optional) Size of the global buffers, in
+bytes.
+This option is a legacy option: change the \f[CB]memorysize\f[R] parameter
+to alter the size of the global buffers.
+This value cannot be changed once JFR has been initalized.
+(STRING, default determined by the value for \f[CB]memorysize\f[R])
+.IP \[bu] 2
+\f[CB]maxchunksize\f[R]: (Optional) Maximum size of an individual data
+chunk in bytes if one of the following suffixes is not used: \[aq]m\[aq]
+or \[aq]M\[aq] for megabytes OR \[aq]g\[aq] or \[aq]G\[aq] for
+gigabytes.
+This value cannot be changed once JFR has been initialized.
+(STRING, 12M)
+.IP \[bu] 2
+\f[CB]memorysize\f[R]: (Optional) Overall memory size, in bytes if one of
+the following suffixes is not used: \[aq]m\[aq] or \[aq]M\[aq] for
+megabytes OR \[aq]g\[aq] or \[aq]G\[aq] for gigabytes.
+This value cannot be changed once JFR has been initialized.
+(STRING, 10M)
+.IP \[bu] 2
+\f[CB]repositorypath\f[R]: (Optional) Path to the location where
+recordings are stored until they are written to a permanent file.
+(STRING, The default location is the temporary directory for the
+operating system.
+On Linux operating systems, the temporary directory is \f[CB]/tmp\f[R].
+On Windwows, the temporary directory is specified by the \f[CB]TMP\f[R]
+environment variable.)
+.IP \[bu] 2
+\f[CB]stackdepth\f[R]: (Optional) Stack depth for stack traces.
+Setting this value greater than the default of 64 may cause a
+performance degradation.
+This value cannot be changed once JFR has been initialized.
+(LONG, 64)
+.IP \[bu] 2
+\f[CB]thread_buffer_size\f[R]: (Optional) Local buffer size for each
+thread in bytes if one of the following suffixes is not used:
+\[aq]k\[aq] or \[aq]K\[aq] for kilobytes or \[aq]m\[aq] or \[aq]M\[aq]
+for megabytes.
+Overriding this parameter could reduce performance and is not
+recommended.
+This value cannot be changed once JFR has been initialized.
+(STRING, 8k)
+.IP \[bu] 2
+\f[CB]samplethreads\f[R]: (Optional) Flag for activating thread sampling.
+(BOOLEAN, true)
 .RE
 .TP
 .B \f[CB]JFR.dump\f[R] [\f[I]options\f[R]]
-See \f[B]JFR.dump\f[R]
-[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JFRCR\-GUID\-6EB11926\-4DAF\-4B99\-AF20\-7FCD284EE6C1]
-in the Java Flight Recorder Command Reference.
+Write data to a file while a flight recording is running
 .RS
+.PP
+Impact: Low
+.PP
+\f[B]Note:\f[R]
+.PP
+The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or
+\f[I]key\f[R]\f[CB]=\f[R]\f[I]value\f[R] syntax.
+No options are required.
+The recording continues to run after the data is written.
+.PP
+\f[I]options\f[R]:
+.IP \[bu] 2
+\f[CB]begin\f[R]: (Optional) Specify the time from which recording data
+will be included in the dump file.
+The format is specified as local time.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]end\f[R]: (Optional) Specify the time to which recording data will
+be included in the dump file.
+The format is specified as local time.
+(STRING, no default value)
+.RS 2
+.PP
+\f[B]Note:\f[R] For both \f[CB]begin\f[R] and \f[CB]end\f[R], the time must
+be in a format that can be read by java.time.LocalTime::parse(STRING),
+java.time.LocalDateTime::parse(STRING) or
+java.time.Instant::parse(STRING).
+For example, "13:20:15", "2020\-03\-17T09:00:00" or
+"2020\-03\-17T09:00:00Z".
+.PP
+\f[B]Note:\f[R] \f[CB]begin\f[R] and \f[CB]end\f[R] times correspond to the
+timestamps found within the recorded information in the flight recording
+data.
+.PP
+Another option is to use a time relative to the current time that is
+specified by a negative integer followed by "s", "m" or "h".
+For example, "\-12h", "\-15m" or "\-30s"
+.RE
+.IP \[bu] 2
+\f[CB]filename\f[R]: (Optional) Name of the file to which the flight
+recording data is dumped.
+If no filename is given, a filename is generated from the PID and the
+current date.
+The filename may also be a directory in which case, the filename is
+generated from the PID and the current date in the specified directory.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]maxage\f[R]: (Optional) Length of time for dumping the flight
+recording data to a file.
+(INTEGER followed by \[aq]s\[aq] for seconds \[aq]m\[aq] for minutes or
+\[aq]h\[aq] for hours, no default value)
+.IP \[bu] 2
+\f[CB]maxsize\f[R]: (Optional) Maximum size for the amount of data to dump
+from a flight recording in bytes if one of the following suffixes is not
+used: \[aq]m\[aq] or \[aq]M\[aq] for megabytes OR \[aq]g\[aq] or
+\[aq]G\[aq] for gigabytes.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]name\f[R]: (Optional) Name of the recording.
+If no name is given, data from all recordings is dumped.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]path\-to\-gc\-root\f[R]: (Optional) Flag for saving the path to
+garbage collection (GC) roots at the time the recording data is dumped.
+The path information is useful for finding memory leaks but collecting
+it can cause the application to pause for a short period of time.
+Turn on this flag only when you have an application that you suspect has
+a memory leak.
+(BOOLEAN, false)
 .RE
 .TP
 .B \f[CB]JFR.start\f[R] [\f[I]options\f[R]]
-See \f[B]JFR.start\f[R]
-[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JFRCR\-GUID\-8DC13618\-1515\-4479\-B0FC\-9F4394BE5455]
-in the Java Flight Recorder Command Reference.
+Start a flight recording
 .RS
+.PP
+Impact: Low
+.PP
+\f[B]Note:\f[R]
+.PP
+The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or
+\f[I]key\f[R]\f[CB]=\f[R]\f[I]value\f[R] syntax.
+If no parameters are entered, then a recording is started with default
+values.
+.PP
+\f[I]options\f[R]:
+.IP \[bu] 2
+\f[CB]delay\f[R]: (Optional) Length of time to wait before starting to
+record (INTEGER followed by \[aq]s\[aq] for seconds \[aq]m\[aq] for
+minutes or \[aq]h\[aq] for hours, 0s)
+.IP \[bu] 2
+\f[CB]disk\f[R]: (Optional) Flag for also writing the data to disk while
+recording (BOOLEAN, true)
+.IP \[bu] 2
+\f[CB]dumponexit\f[R]: (Optional) Flag for writing the recording to disk
+when the Java Virtual Machine (JVM) shuts down.
+If set to \[aq]true\[aq] and no value is given for \f[CB]filename\f[R],
+the recording is written to a file in the directory where the process
+was started.
+The file name is a system\-generated name that contains the process ID,
+the recording ID and the current time stamp.
+(For example: \f[CB]id\-1\-2019_12_12_10_41.jfr\f[R]) (BOOLEAN, false)
+.IP \[bu] 2
+\f[CB]duration\f[R]: (Optional) Length of time to record.
+Note that \f[CB]0s\f[R] means forever (INTEGER followed by \[aq]s\[aq] for
+seconds \[aq]m\[aq] for minutes or \[aq]h\[aq] for hours, 0s)
+.IP \[bu] 2
+\f[CB]filename\f[R]: (Optional) Name of the file to which the flight
+recording data is written when the recording is stopped.
+If no filename is given, a filename is generated from the PID and the
+current date and is placed in the directory where the process was
+started.
+The filename may also be a directory in which case, the filename is
+generated from the PID and the current date in the specified directory.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]maxage\f[R]: (Optional) Maximum time to keep the recorded data on
+disk.
+This parameter is valid only when the \f[CB]disk\f[R] parameter is set to
+\f[CB]true\f[R].
+Note \f[CB]0s\f[R] means forever.
+(INTEGER followed by \[aq]s\[aq] for seconds \[aq]m\[aq] for minutes or
+\[aq]h\[aq] for hours, 0s)
+.IP \[bu] 2
+\f[CB]maxsize\f[R]: (Optional) Maximum size of the data to keep on disk in
+bytes if one of the following suffixes is not used: \[aq]m\[aq] or
+\[aq]M\[aq] for megabytes OR \[aq]g\[aq] or \[aq]G\[aq] for gigabytes.
+This parameter is valid only when the \f[CB]disk\f[R] parameter is set to
+\[aq]true\[aq].
+The value must not be less than the value for the \f[CB]maxchunksize\f[R]
+parameter set with the \f[CB]JFR.configure\f[R] command.
+(STRING, 0 (no maximum size))
+.IP \[bu] 2
+\f[CB]name\f[R]: (Optional) Name of the recording.
+If no name is provided, a name is generated.
+Make note of the generated name that is shown in the response to the
+command so that you can use it with other commands.
+(STRING, system\-generated default name)
+.IP \[bu] 2
+\f[CB]path\-to\-gc\-root\f[R]: (Optional) Flag for saving the path to
+garbage collection (GC) roots at the end of a recording.
+The path information is useful for finding memory leaks but collecting
+it is time consuming.
+Turn on this flag only when you have an application that you suspect has
+a memory leak.
+If the \f[CB]settings\f[R] parameter is set to \[aq]profile\[aq], then the
+information collected includes the stack trace from where the potential
+leaking object was allocated.
+(BOOLEAN, false)
+.IP \[bu] 2
+\f[CB]settings\f[R]: (Optional) Name of the settings file that identifies
+which events to record.
+To specify more than one file, separate the names with a comma
+(\[aq],\[aq]).
+Include the path if the file is not in \f[CB]JAVA\-HOME\f[R]/lib/jfr.
+The following profiles are included with the JDK in the
+\f[CB]JAVA\-HOME\f[R]/lib/jfr directory: \[aq]default.jfc\[aq]: collects a
+predefined set of information with low overhead, so it has minimal
+impact on performance and can be used with recordings that run
+continuously; \[aq]profile.jfc\[aq]: Provides more data than the
+\[aq]default.jfc\[aq] profile, but with more overhead and impact on
+performance.
+Use this configuration for short periods of time when more information
+is needed.
+Use \f[CB]none\f[R] to start a recording without a predefined
+configuration file.
+(STRING, \f[CB]JAVA\-HOME\f[R]/lib/jfr/default.jfc)
 .RE
 .TP
 .B \f[CB]JFR.stop\f[R] [\f[I]options\f[R]]
-See \f[B]JFR.stop\f[R]
-[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JFRCR\-GUID\-66CC94C8\-8EDF\-4BB6\-8E7A\-49973025D4D9]
-in the Java Flight Recorder Command Reference.
+Stop a flight recording
 .RS
+.PP
+Impact: Low
+.PP
+\f[B]Note:\f[R]
+.PP
+The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or
+\f[I]key\f[R]\f[CB]=\f[R]\f[I]value\f[R] syntax.
+If no parameters are entered, then no recording is stopped.
+.PP
+\f[I]options\f[R]:
+.IP \[bu] 2
+\f[CB]filename\f[R]: (Optional) Name of the file to which the recording is
+written when the recording is stopped.
+If no path is provided, the data from the recording is discarded.
+(STRING, no default value)
+.IP \[bu] 2
+\f[CB]name\f[R]: (Optional) Name of the recording (STRING, no default
+value)
 .RE
 .TP
 .B \f[CB]JVMTI.agent_load\f[R] [\f[I]arguments\f[R]]
--- a/src/jdk.jcmd/share/man/jinfo.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jinfo.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JINFO" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JINFO" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -29,7 +29,7 @@
 process
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jinfo\f[R] [\f[I]option\f[R]] \f[I]pid\f[R]
 .TP
--- a/src/jdk.jcmd/share/man/jmap.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jmap.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,14 +21,14 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JMAP" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JMAP" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
 jmap \- print details of a specified process
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jmap\f[R] [\f[I]options\f[R]] \f[I]pid\f[R]
 .TP
--- a/src/jdk.jcmd/share/man/jps.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jps.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,14 +21,14 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JPS" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JPS" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
 jps \- list the instrumented JVMs on the target system
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jps\f[R] [\f[CB]\-q\f[R]] [\f[CB]\-mlvV\f[R]] [\f[I]hostid\f[R]]
 .PP
--- a/src/jdk.jcmd/share/man/jstack.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jstack.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JSTACK" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JSTACK" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -29,7 +29,7 @@
 process
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jstack\f[R] [\f[I]options\f[R]] \f[I]pid\f[R]
 .TP
--- a/src/jdk.jcmd/share/man/jstat.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jcmd/share/man/jstat.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,14 +21,14 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JSTAT" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JSTAT" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
 jstat \- monitor JVM statistics
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jstat\f[R] \f[I]generalOptions\f[R]
 .PP
--- a/src/jdk.jconsole/share/man/jconsole.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jconsole/share/man/jconsole.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JCONSOLE" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JCONSOLE" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ClassFileReader.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ClassFileReader.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,13 +61,6 @@
     /**
      * Returns a ClassFileReader instance of a given path.
      */
-    public static ClassFileReader newInstance(Path path) throws IOException {
-        return newInstance(path, null);
-    }
-
-    /**
-     * Returns a ClassFileReader instance of a given path.
-     */
     public static ClassFileReader newInstance(Path path, Runtime.Version version) throws IOException {
         if (Files.notExists(path)) {
             throw new FileNotFoundException(path.toString());
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -915,6 +915,11 @@
                             option);
                 return false;
             }
+            if (!options.rootModules.isEmpty()) {
+                reportError("err.invalid.options", "-m or --module",
+                            option);
+                return false;
+            }
             return true;
         }
 
@@ -922,12 +927,12 @@
         boolean run(JdepsConfiguration config) throws IOException {
             // check if any JAR file contains unnamed package
             for (String arg : inputArgs) {
-                try (ClassFileReader reader = ClassFileReader.newInstance(Paths.get(arg))) {
+                try (ClassFileReader reader = ClassFileReader.newInstance(Paths.get(arg), config.getVersion())) {
                     Optional<String> classInUnnamedPackage =
                         reader.entries().stream()
-                             .filter(n -> n.endsWith(".class"))
-                             .filter(cn -> toPackageName(cn).isEmpty())
-                             .findFirst();
+                              .filter(n -> n.endsWith(".class"))
+                              .filter(cn -> toPackageName(cn).isEmpty())
+                              .findFirst();
 
                     if (classInUnnamedPackage.isPresent()) {
                         if (classInUnnamedPackage.get().equals("module-info.class")) {
@@ -942,10 +947,10 @@
 
             ModuleInfoBuilder builder
                  = new ModuleInfoBuilder(config, inputArgs, dir, openModule);
-            boolean ok = builder.run();
-
-            if (!ok && !options.nowarning) {
+            boolean ok = builder.run(options.ignoreMissingDeps, log, options.nowarning);
+            if (!ok) {
                 reportError("err.missing.dependences");
+                log.println();
                 builder.visitMissingDeps(new SimpleDepVisitor());
             }
             return ok;
@@ -981,7 +986,7 @@
                 throw new UncheckedBadArgs(new BadArgs("err.invalid.options",
                                                        list, "--check"));
             }
-            return new ModuleAnalyzer(config, log, modules).run();
+            return new ModuleAnalyzer(config, log, modules).run(options.ignoreMissingDeps);
         }
 
         /*
@@ -1041,7 +1046,7 @@
                                                                        separator);
             boolean ok = analyzer.run(options.depth(), options.ignoreMissingDeps);
             if (!ok) {
-                reportError("err.cant.list.module.deps");
+                reportError("err.missing.dependences");
                 log.println();
                 analyzer.visitMissingDeps(new SimpleDepVisitor());
             }
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleAnalyzer.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleAnalyzer.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,22 +24,16 @@
  */
 package com.sun.tools.jdeps;
 
-import static com.sun.tools.jdeps.Graph.*;
 import static com.sun.tools.jdeps.JdepsFilter.DEFAULT_FILTER;
 import static com.sun.tools.jdeps.Module.*;
 import static java.lang.module.ModuleDescriptor.Requires.Modifier.*;
 import static java.util.stream.Collectors.*;
 
 import com.sun.tools.classfile.Dependency;
-import com.sun.tools.jdeps.JdepsTask.BadArgs;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.lang.module.ModuleDescriptor;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -80,23 +74,32 @@
         }
     }
 
-    public boolean run() throws IOException {
+    public boolean run(boolean ignoreMissingDeps) throws IOException {
         try {
-            // compute "requires transitive" dependences
-            modules.values().forEach(ModuleDeps::computeRequiresTransitive);
+            for (ModuleDeps md: modules.values()) {
+                // compute "requires transitive" dependences
+                md.computeRequiresTransitive(ignoreMissingDeps);
+                // compute "requires" dependences
+                md.computeRequires(ignoreMissingDeps);
+                // print module descriptor
+                md.printModuleDescriptor();
 
-            modules.values().forEach(md -> {
-                // compute "requires" dependences
-                md.computeRequires();
                 // apply transitive reduction and reports recommended requires.
-                md.analyzeDeps();
-            });
+                boolean ok = md.analyzeDeps();
+                if (!ok) return false;
+
+                if (ignoreMissingDeps && md.hasMissingDependencies()) {
+                    log.format("Warning: --ignore-missing-deps specified. Missing dependencies from %s are ignored%n",
+                               md.root.name());
+                }
+            }
         } finally {
             dependencyFinder.shutdown();
         }
         return true;
     }
 
+
     class ModuleDeps {
         final Module root;
         Set<Module> requiresTransitive;
@@ -110,23 +113,22 @@
         /**
          * Compute 'requires transitive' dependences by analyzing API dependencies
          */
-        private void computeRequiresTransitive() {
+        private void computeRequiresTransitive(boolean ignoreMissingDeps) {
             // record requires transitive
-            this.requiresTransitive = computeRequires(true)
+            this.requiresTransitive = computeRequires(true, ignoreMissingDeps)
                 .filter(m -> !m.name().equals(JAVA_BASE))
                 .collect(toSet());
 
             trace("requires transitive: %s%n", requiresTransitive);
         }
 
-        private void computeRequires() {
-            this.requires = computeRequires(false).collect(toSet());
+        private void computeRequires(boolean ignoreMissingDeps) {
+            this.requires = computeRequires(false, ignoreMissingDeps).collect(toSet());
             trace("requires: %s%n", requires);
         }
 
-        private Stream<Module> computeRequires(boolean apionly) {
+        private Stream<Module> computeRequires(boolean apionly, boolean ignoreMissingDeps) {
             // analyze all classes
-
             if (apionly) {
                 dependencyFinder.parseExportedAPIs(Stream.of(root));
             } else {
@@ -135,9 +137,14 @@
 
             // find the modules of all the dependencies found
             return dependencyFinder.getDependences(root)
+                        .filter(a -> !(ignoreMissingDeps && Analyzer.notFound(a)))
                         .map(Archive::getModule);
         }
 
+        boolean hasMissingDependencies() {
+            return dependencyFinder.getDependences(root).anyMatch(Analyzer::notFound);
+        }
+
         ModuleDescriptor descriptor() {
             return descriptor(requiresTransitive, requires);
         }
@@ -196,12 +203,30 @@
             return descriptor(requiresTransitive, g.adjacentNodes(root));
         }
 
+        private void showMissingDeps() {
+            // build the analyzer if there are missing dependences
+            Analyzer analyzer = new Analyzer(configuration, Analyzer.Type.CLASS, DEFAULT_FILTER);
+            analyzer.run(Set.of(root), dependencyFinder.locationToArchive());
+            log.println("Error: Missing dependencies: classes not found from the module path.");
+            Analyzer.Visitor visitor = new Analyzer.Visitor() {
+                @Override
+                public void visitDependence(String origin, Archive originArchive, String target, Archive targetArchive) {
+                    log.format("   %-50s -> %-50s %s%n", origin, target, targetArchive.getName());
+                }
+            };
+            analyzer.visitDependences(root, visitor, Analyzer.Type.VERBOSE, Analyzer::notFound);
+            log.println();
+        }
+
         /**
          * Apply transitive reduction on the resulting graph and reports
          * recommended requires.
          */
-        private void analyzeDeps() {
-            printModuleDescriptor(log, root);
+        private boolean analyzeDeps() {
+            if (requires.stream().anyMatch(m -> m == UNNAMED_MODULE)) {
+                showMissingDeps();
+                return false;
+            }
 
             ModuleDescriptor analyzedDescriptor = descriptor();
             if (!matches(root.descriptor(), analyzedDescriptor)) {
@@ -223,6 +248,7 @@
 
             checkQualifiedExports();
             log.println();
+            return true;
         }
 
         private void checkQualifiedExports() {
@@ -239,6 +265,10 @@
                         .collect(joining(","))));
         }
 
+        void printModuleDescriptor() {
+            printModuleDescriptor(log, root);
+        }
+
         private void printModuleDescriptor(PrintWriter out, Module module) {
             ModuleDescriptor descriptor = module.descriptor();
             out.format("%s (%s)%n", descriptor.name(), module.location());
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleInfoBuilder.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleInfoBuilder.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -98,7 +98,7 @@
         }
     }
 
-    public boolean run() throws IOException {
+    public boolean run(boolean ignoreMissingDeps, PrintWriter log, boolean quiet) throws IOException {
         try {
             // pass 1: find API dependencies
             Map<Archive, Set<Archive>> requiresTransitive = computeRequiresTransitive();
@@ -108,52 +108,65 @@
 
             analyzer.run(automaticModules(), dependencyFinder.locationToArchive());
 
-            boolean missingDeps = false;
             for (Module m : automaticModules()) {
                 Set<Archive> apiDeps = requiresTransitive.containsKey(m)
                                             ? requiresTransitive.get(m)
                                             : Collections.emptySet();
 
-                Path file = outputdir.resolve(m.name()).resolve("module-info.java");
+                // if this is a multi-release JAR, write to versions/$VERSION/module-info.java
+                Runtime.Version version = configuration.getVersion();
+                Path dir = version != null
+                            ? outputdir.resolve(m.name())
+                                       .resolve("versions")
+                                       .resolve(String.valueOf(version.feature()))
+                            : outputdir.resolve(m.name());
+                Path file = dir.resolve("module-info.java");
 
                 // computes requires and requires transitive
-                Module normalModule = toNormalModule(m, apiDeps);
+                Module normalModule = toNormalModule(m, apiDeps, ignoreMissingDeps);
                 if (normalModule != null) {
                     automaticToNormalModule.put(m, normalModule);
 
                     // generate module-info.java
-                    System.out.format("writing to %s%n", file);
+                    if (!quiet) {
+                        if (ignoreMissingDeps && analyzer.requires(m).anyMatch(Analyzer::notFound)) {
+                            log.format("Warning: --ignore-missing-deps specified. Missing dependencies from %s are ignored%n",
+                                       m.name());
+                        }
+                        log.format("writing to %s%n", file);
+                    }
                     writeModuleInfo(file,  normalModule.descriptor());
                 } else {
                     // find missing dependences
-                    System.out.format("Missing dependence: %s not generated%n", file);
-                    missingDeps = true;
+                    return false;
                 }
             }
 
-            return !missingDeps;
         } finally {
             dependencyFinder.shutdown();
         }
+        return true;
     }
 
-    private Module toNormalModule(Module module, Set<Archive> requiresTransitive)
+    private Module toNormalModule(Module module, Set<Archive> requiresTransitive, boolean ignoreMissingDeps)
         throws IOException
     {
         // done analysis
         module.close();
 
-        if (analyzer.requires(module).anyMatch(Analyzer::notFound)) {
+        if (!ignoreMissingDeps && analyzer.requires(module).anyMatch(Analyzer::notFound)) {
             // missing dependencies
             return null;
         }
 
         Map<String, Boolean> requires = new HashMap<>();
         requiresTransitive.stream()
+            .filter(a -> !(ignoreMissingDeps && Analyzer.notFound(a)))
             .map(Archive::getModule)
             .forEach(m -> requires.put(m.name(), Boolean.TRUE));
 
         analyzer.requires(module)
+            .filter(a -> !(ignoreMissingDeps && Analyzer.notFound(a)))
             .map(Archive::getModule)
             .forEach(d -> requires.putIfAbsent(d.name(), Boolean.FALSE));
 
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -229,7 +229,6 @@
 err.command.set={0} and {1} options are specified.
 err.unknown.option=unknown option: {0}
 err.missing.arg=no value given for {0}
-err.missing.dependences=missing dependencies
 err.invalid.arg.for.option=invalid argument for option: {0}
 err.option.after.class=option must be specified before classes: {0}
 err.genmoduleinfo.not.jarfile={0} is a modular JAR file that cannot be specified with the --generate-module-info option
@@ -246,8 +245,8 @@
 err.multirelease.option.notfound={0} is a multi-release jar file but --multi-release option is not set
 err.multirelease.version.associated=class {0} already associated with version {1}, trying to add version {2}
 err.multirelease.jar.malformed=malformed multi-release jar, {0}, bad entry: {1}
-err.cant.list.module.deps=\
-Missing dependencies from the module path and classpath.\n\
+err.missing.dependences=\
+Missing dependencies: classes not found from the module path and classpath.\n\
 To suppress this error, use --ignore-missing-deps to continue.
 
 warn.invalid.arg=Path does not exist: {0}
--- a/src/jdk.jdeps/share/man/javap.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/man/javap.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAVAP" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JAVAP" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jdeps/share/man/jdeprscan.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/man/jdeprscan.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JDEPRSCAN" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JDEPRSCAN" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jdeps/share/man/jdeps.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdeps/share/man/jdeps.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JDEPS" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JDEPS" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jdi/share/man/jdb.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jdi/share/man/jdb.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JDB" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JDB" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jfr/share/classes/jdk/jfr/Recording.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/Recording.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -424,7 +424,7 @@
          *
          * @since 14
          */
-        public void setFlushInterval(Duration interval) {
+        /*package private*/ void setFlushInterval(Duration interval) {
             Objects.nonNull(interval);
             if (interval.isNegative()) {
                 throw new IllegalArgumentException("Stream interval can't be negative");
@@ -439,7 +439,7 @@
      *
      * @since 14
      */
-    public Duration getFlushInterval() {
+    /*package private*/ Duration getFlushInterval() {
         return internal.getFlushInterval();
     }
 
--- a/src/jdk.jfr/share/classes/jdk/jfr/consumer/RecordingStream.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/consumer/RecordingStream.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,7 +86,6 @@
         Utils.checkAccessFlightRecorder();
         AccessControlContext acc = AccessController.getContext();
         this.recording = new Recording();
-        this.recording.setFlushInterval(Duration.ofMillis(1000));
         try {
             PlatformRecording pr = PrivateAccess.getInstance().getPlatformRecording(recording);
             this.directoryStream = new EventDirectoryStream(acc, null, SecuritySupport.PRIVILIGED, pr);
@@ -267,20 +266,6 @@
         recording.setMaxSize(maxSize);
     }
 
-    /**
-     * Determines how often events are made available for streaming.
-     *
-     * @param interval the interval at which events are made available to the
-     *        stream, no {@code null}
-     *
-     * @throws IllegalArgumentException if {@code interval} is negative
-     *
-     * @throws IllegalStateException if the stream is closed
-     */
-    public void setFlushInterval(Duration interval) {
-        recording.setFlushInterval(interval);
-    }
-
     @Override
     public void setReuse(boolean reuse) {
         directoryStream.setReuse(reuse);
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/DCmdStart.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/DCmdStart.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,6 +43,7 @@
 import jdk.jfr.internal.LogTag;
 import jdk.jfr.internal.Logger;
 import jdk.jfr.internal.OldObjectSample;
+import jdk.jfr.internal.PlatformRecording;
 import jdk.jfr.internal.PrivateAccess;
 import jdk.jfr.internal.SecuritySupport.SafePath;
 import jdk.jfr.internal.Type;
@@ -186,7 +187,8 @@
         }
 
         if (flush != null) {
-            recording.setFlushInterval(Duration.ofNanos(flush));
+            PlatformRecording p = PrivateAccess.getInstance().getPlatformRecording(recording);
+            p.setFlushInterval(Duration.ofNanos(flush));
         }
 
         if (maxSize != null) {
--- a/src/jdk.jfr/share/conf/jfr/default.jfc	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jfr/share/conf/jfr/default.jfc	Wed Jan 15 01:54:35 2020 +0000
@@ -671,32 +671,7 @@
     </event>
 
     <event name="jdk.Flush">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStorage">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStacktrace">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStringPool">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushMetadata">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushTypeSet">
-      <setting name="enabled">true</setting>
+      <setting name="enabled">false</setting>
       <setting name="threshold">0 ns</setting>
     </event>
 
--- a/src/jdk.jfr/share/conf/jfr/profile.jfc	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jfr/share/conf/jfr/profile.jfc	Wed Jan 15 01:54:35 2020 +0000
@@ -671,32 +671,7 @@
     </event>
 
     <event name="jdk.Flush">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStorage">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStacktrace">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushStringPool">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushMetadata">
-      <setting name="enabled">true</setting>
-      <setting name="threshold">0 ns</setting>
-    </event>
-
-    <event name="jdk.FlushTypeSet">
-      <setting name="enabled">true</setting>
+      <setting name="enabled">false</setting>
       <setting name="threshold">0 ns</setting>
     </event>
 
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties	Wed Jan 15 01:54:35 2020 +0000
@@ -46,7 +46,8 @@
 \                                        if it exists.
 
 main.opt.add-modules=\
-\      --add-modules <mod>[,<mod>...]    Root modules to resolve
+\      --add-modules <mod>[,<mod>...]    Root modules to resolve in addition to the\n\
+\                                        initial modules. <mod> can also be ALL-MODULE-PATH.
 
 main.opt.limit-modules=\
 \      --limit-modules <mod>[,<mod>...]  Limit the universe of observable\n\
--- a/src/jdk.jlink/share/man/jlink.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jlink/share/man/jlink.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JLINK" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JLINK" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jlink/share/man/jmod.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jlink/share/man/jmod.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JMOD" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JMOD" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/Feedback.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/Feedback.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -596,6 +596,7 @@
         INTERFACE("interface declaration"),
         ENUM("enum declaration"),
         ANNOTATION("annotation interface declaration"),
+        RECORD("record declaration"),
         METHOD("method declaration -- note: {type}==parameter-types"),
         VARDECL("variable declaration without init"),
         VARINIT("variable declaration with init"),
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3324,6 +3324,9 @@
                 case ANNOTATION_TYPE_SUBKIND:
                     kind = "@interface";
                     break;
+                case RECORD_SUBKIND:
+                    kind = "record";
+                    break;
                 default:
                     assert false : "Wrong kind" + ck.subKind();
                     kind = "class";
@@ -3819,6 +3822,9 @@
                 case ANNOTATION_TYPE_SUBKIND:
                     custom(FormatCase.ANNOTATION, ((TypeDeclSnippet) sn).name());
                     break;
+                case RECORD_SUBKIND:
+                    custom(FormatCase.RECORD, ((TypeDeclSnippet) sn).name());
+                    break;
                 case METHOD_SUBKIND:
                     custom(FormatCase.METHOD, ((MethodSnippet) sn).name(), ((MethodSnippet) sn).parameterTypes());
                     break;
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -855,6 +855,7 @@
    interface  -- interface declaration\n\t\
    enum       -- enum declaration\n\t\
    annotation -- annotation interface declaration\n\t\
+   record     -- record declaration\n\t\
    method     -- method declaration -- note: {type}==parameter-types\n\t\
    vardecl    -- variable declaration without init\n\t\
    varinit    -- variable declaration with init\n\t\
@@ -1158,12 +1159,12 @@
 /set format verbose action '  update overwrote' overwrote-update    \n\
 /set format verbose action '  update dropped' dropped-update    \n\
 \n\
-/set format verbose until ', however, it cannot be instantiated or its methods invoked until'   defined-class-primary    \n\
+/set format verbose until ', however, it cannot be instantiated or its methods invoked until'   defined-class,record-primary    \n\
 /set format verbose until ', however, its methods cannot be invoked until'                      defined-interface-primary    \n\
 /set format verbose until ', however, it cannot be used until'                                  defined-enum,annotation-primary    \n\
 /set format verbose until ', however, it cannot be invoked until'                               defined-method-primary    \n\
 /set format verbose until ', however, it cannot be referenced until'                            notdefined-primary    \n\
-/set format verbose until ' which cannot be instantiated or its methods invoked until'          defined-class-update    \n\
+/set format verbose until ' which cannot be instantiated or its methods invoked until'          defined-class,record-update    \n\
 /set format verbose until ' whose methods cannot be invoked until'                              defined-interface-update    \n\
 /set format verbose until ' which cannot be invoked until'                                      defined-method-update    \n\
 /set format verbose until ' which cannot be referenced until'                                   notdefined-update    \n\
@@ -1183,6 +1184,7 @@
 /set format verbose typeKind 'interface'              interface    \n\
 /set format verbose typeKind 'enum'                   enum    \n\
 /set format verbose typeKind 'annotation interface'   annotation    \n\
+/set format verbose typeKind 'record'                 record    \n\
 \n\
 /set format verbose result '{name} ==> {value}{post}'                                        added,modified,replaced-ok-primary    \n\
 \n\
@@ -1194,10 +1196,10 @@
 /set format verbose display '{pre}{action} variable {name}{post}'                            dropped-vardecl,varinit,expression    \n\
 /set format verbose display '{pre}{action} variable {name}, reset to null{post}'             replaced-vardecl,varinit-ok-update    \n\
 \n\
-/set format verbose display '{pre}{action} {typeKind} {name}{resolve}{post}'                 class,interface,enum,annotation    \n\
+/set format verbose display '{pre}{action} {typeKind} {name}{resolve}{post}'                 class,interface,enum,annotation,record    \n\
 /set format verbose display '{pre}{action} method {name}({type}){resolve}{post}'             method    \n\
 \n\
-/set format verbose display '{pre}attempted to use {typeKind} {name}{resolve}{post}'         used-class,interface,enum,annotation    \n\
+/set format verbose display '{pre}attempted to use {typeKind} {name}{resolve}{post}'         used-class,interface,enum,annotation,record    \n\
 /set format verbose display '{pre}attempted to call method {name}({type}){resolve}{post}'    used-method    \n\
 \n\
 /set truncation verbose 80\n\
@@ -1211,7 +1213,7 @@
 \n\
 /set prompt concise 'jshell> '   '   ...> '    \n\
 \n\
-/set format concise display ''                                                              class,interface,enum,annotation,method,assignment,varinit,vardecl-ok    \n\
+/set format concise display ''                                                              class,interface,enum,annotation,record,method,assignment,varinit,vardecl-ok    \n\
 \n\
 /set feedback normal    \n\
 \n\
--- a/src/jdk.jshell/share/classes/jdk/jshell/Corraller.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Corraller.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,10 @@
 import static com.sun.tools.javac.code.Flags.STATIC;
 import static com.sun.tools.javac.code.Flags.INTERFACE;
 import static com.sun.tools.javac.code.Flags.ENUM;
+import static com.sun.tools.javac.code.Flags.RECORD;
+import static com.sun.tools.javac.code.Flags.SYNTHETIC;
+import com.sun.tools.javac.tree.JCTree.Tag;
+import com.sun.tools.javac.tree.TreeInfo;
 import jdk.jshell.Wrap.CompoundWrap;
 import jdk.jshell.Wrap.Range;
 import jdk.jshell.Wrap.RangeWrap;
@@ -114,6 +118,7 @@
     public void visitClassDef(JCClassDecl tree) {
         boolean isEnum = (tree.mods.flags & ENUM) != 0;
         boolean isInterface = (tree.mods.flags & INTERFACE ) != 0;
+        boolean isRecord = (tree.mods.flags & RECORD ) != 0;
         int classBegin = dis.getStartPosition(tree);
         int classEnd = dis.getEndPosition(tree);
         //debugWrap("visitClassDef: %d-%d = %s\n", classBegin, classEnd, source.substring(classBegin, classEnd));
@@ -151,8 +156,12 @@
                 // non-enum
                 boolean constructorSeen = false;
                 for (List<? extends JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
+                    JCTree t = l.head;
+                    if (isRecord && t.hasTag(Tag.VARDEF) && (TreeInfo.flags(t) & RECORD) != 0) {
+                        //record parameters are part of the record's header
+                        continue;
+                    }
                     wrappedDefs.append("\n   ");
-                    JCTree t = l.head;
                     switch (t.getKind()) {
                         case METHOD:
                             constructorSeen = constructorSeen || ((MethodTree)t).getName() == tree.name.table.names.init;
@@ -166,7 +175,14 @@
                     }
                     wrappedDefs.append(corral(t));
                 }
-                if (!constructorSeen && !isInterface && !isEnum) {
+                if (!constructorSeen && isRecord) {
+                    // Generate a default constructor, since
+                    // this is a regular record and there are no constructors
+                    if (wrappedDefs.length() > 0) {
+                        wrappedDefs.append("\n ");
+                    }
+                    wrappedDefs.append("  public " + tree.name.toString() + " " + resolutionExceptionBlock);
+                } else if (!constructorSeen && !isInterface && !isEnum) {
                     // Generate a default constructor, since
                     // this is a regular class and there are no constructors
                     if (wrappedDefs.length() > 0) {
@@ -175,7 +191,9 @@
                     wrappedDefs.append(defaultConstructor(tree));
                 }
             }
-            bodyBegin = dis.getStartPosition(tree.defs.head);
+            if (!isRecord) {
+                bodyBegin = dis.getStartPosition(tree.defs.head);
+            }
         }
         Object defs = wrappedDefs.length() == 1
             ? wrappedDefs.first()
--- a/src/jdk.jshell/share/man/jshell.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jshell/share/man/jshell.1	Wed Jan 15 01:54:35 2020 +0000
@@ -8,7 +8,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -22,7 +22,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JSHELL" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JSHELL" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.jstatd/share/man/jstatd.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.jstatd/share/man/jstatd.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JSTATD" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JSTATD" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
@@ -29,7 +29,7 @@
 HotSpot VMs
 .SH SYNOPSIS
 .PP
-\f[B]Note:\f[R] This command is experimental\ and unsupported.
+\f[B]Note:\f[R] This command is experimental and unsupported.
 .PP
 \f[CB]jstatd\f[R] [\f[I]options\f[R]]
 .TP
--- a/src/jdk.management/unix/classes/com/sun/management/internal/OperatingSystemImpl.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.management/unix/classes/com/sun/management/internal/OperatingSystemImpl.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,7 +61,8 @@
             // it can use as much memory as the host's OS allows.
             long memLimit = containerMetrics.getMemoryLimit();
             if (limit >= 0 && memLimit >= 0) {
-                return limit - memLimit;
+                // we see a limit == 0 on some machines where "kernel does not support swap limit capabilities"
+                return (limit < memLimit) ? 0 : limit - memLimit;
             }
         }
         return getTotalSwapSpaceSize0();
--- a/src/jdk.rmic/share/man/rmic.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.rmic/share/man/rmic.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "RMIC" "1" "2018" "JDK 13" "JDK Commands"
+.TH "RMIC" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- a/src/jdk.scripting.nashorn.shell/share/man/jjs.1	Thu Jan 09 20:16:21 2020 +0000
+++ b/src/jdk.scripting.nashorn.shell/share/man/jjs.1	Wed Jan 15 01:54:35 2020 +0000
@@ -7,7 +7,7 @@
 .\"
 .\" This code is distributed in the hope that it will be useful, but WITHOUT
 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 .\" version 2 for more details (a copy is included in the LICENSE file that
 .\" accompanied this code).
 .\"
@@ -21,7 +21,7 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JJS" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JJS" "1" "2020" "JDK 14" "JDK Commands"
 .hy
 .SH NAME
 .PP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c2/TestJumpTable.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8229855
+ * @summary Test jump table with key value that gets out of bounds after loop unrolling.
+ * @run main/othervm -XX:CompileCommand=dontinline,compiler.c2.TestJumpTable::test*
+ *                   -Xbatch -XX:+UnlockDiagnosticVMOptions -XX:-TieredCompilation -XX:-UseSwitchProfiling
+ *                   compiler.c2.TestJumpTable
+ */
+
+package compiler.c2;
+
+public class TestJumpTable {
+
+    public static int test() {
+        int res = 0;
+        for (int i = 10; i < 50; ++i) {
+            switch (i * 5) {
+                case 15:
+                case 25:
+                case 40:
+                case 101:
+                    return 42;
+                case 45:
+                case 51:
+                case 60:
+                    res++;
+                    break;
+            }
+        }
+        return res;
+    }
+
+    public static void main(String[] args) {
+        for (int i = 0; i < 20_000; ++i) {
+            test();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/macronodes/TestCompleteVolatileStore.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8236140
+ * @requires vm.gc.Serial
+ * @summary Tests proper rehashing of a captured volatile field StoreL node when completing it.
+ * @run main/othervm -Xbatch -XX:+UseSerialGC -XX:CompileCommand=compileonly,compiler.macronodes.TestCompleteVolatileStore::test
+ *                   compiler.macronodes.TestCompleteVolatileStore
+ */
+
+package compiler.macronodes;
+
+public class TestCompleteVolatileStore {
+    int i1 = 4;
+
+    public void test() {
+        /*
+         * The store to the volatile field 'l1' (StoreL) of 'a' is captured in the Initialize node of 'a'
+         * (i.e. additional input to it) and completed in InitializeNode::complete_stores.
+         * Since 'l1' is volatile, the hash of the StoreL is non-zero triggering the hash assertion failure.
+         */
+        A a = new A();
+
+        // Make sure that the CheckCastPP node of 'a' is used in the input chain of the Intialize node of 'b'
+        B b = new B(a);
+
+        // Make sure 'b' is non-scalar-replacable to avoid eliminating all allocations
+        B[] arr = new B[i1];
+        arr[i1-3] = b;
+    }
+
+    public static void main(String[] strArr) {
+        TestCompleteVolatileStore _instance = new TestCompleteVolatileStore();
+        for (int i = 0; i < 10_000; i++ ) {
+            _instance.test();
+        }
+    }
+}
+
+class A {
+    // Needs to be volatile to have a non-zero hash for the StoreL node.
+    volatile long l1;
+
+    A() {
+        // StoreL gets captured and is later processed in InitializeNode::complete_stores while expanding the allocation node.
+        this.l1 = 256;
+    }
+}
+
+class B {
+    A a;
+
+    B(A a) {
+        this.a = a;
+    }
+}
+
--- a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -144,16 +144,21 @@
                 "--memory-swap", swapAllocation
             );
 
-        DockerTestUtils.dockerRunJava(opts)
-            .shouldHaveExitValue(0)
-            .shouldContain("Checking OperatingSystemMXBean")
-            .shouldContain("OperatingSystemMXBean.getTotalPhysicalMemorySize: " + expectedMemory)
-            .shouldMatch("OperatingSystemMXBean\\.getFreePhysicalMemorySize: [1-9][0-9]+")
-            .shouldContain("OperatingSystemMXBean.getTotalMemorySize: " + expectedMemory)
-            .shouldMatch("OperatingSystemMXBean\\.getFreeMemorySize: [1-9][0-9]+")
-            .shouldContain("OperatingSystemMXBean.getTotalSwapSpaceSize: " + expectedSwap)
-            .shouldMatch("OperatingSystemMXBean\\.getFreeSwapSpaceSize: [1-9][0-9]+")
-            ;
+        OutputAnalyzer out = DockerTestUtils.dockerRunJava(opts);
+        out.shouldHaveExitValue(0)
+           .shouldContain("Checking OperatingSystemMXBean")
+           .shouldContain("OperatingSystemMXBean.getTotalPhysicalMemorySize: " + expectedMemory)
+           .shouldMatch("OperatingSystemMXBean\\.getFreePhysicalMemorySize: [1-9][0-9]+")
+           .shouldContain("OperatingSystemMXBean.getTotalMemorySize: " + expectedMemory)
+           .shouldMatch("OperatingSystemMXBean\\.getFreeMemorySize: [1-9][0-9]+")
+           .shouldMatch("OperatingSystemMXBean\\.getFreeSwapSpaceSize: [1-9][0-9]+");
+        // in case of warnings like : "Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap."
+        // the getTotalSwapSpaceSize does not return the expected result, but 0
+        try {
+            out.shouldContain("OperatingSystemMXBean.getTotalSwapSpaceSize: " + expectedSwap);
+        } catch(RuntimeException ex) {
+            out.shouldContain("OperatingSystemMXBean.getTotalSwapSpaceSize: 0");
+        }
     }
 
 }
--- a/test/hotspot/jtreg/gc/shenandoah/TestEvilSyncBug.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/hotspot/jtreg/gc/shenandoah/TestEvilSyncBug.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -49,8 +49,9 @@
         if (args.length > 0) {
             test();
         } else {
-            ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
-
+            // Use 1/4 of available processors to avoid over-saturation.
+            int numJobs = Math.max(1, Runtime.getRuntime().availableProcessors() / 4);
+            ExecutorService pool = Executors.newFixedThreadPool(numJobs);
             Future<?>[] fs = new Future<?>[NUM_RUNS];
 
             for (int c = 0; c < NUM_RUNS; c++) {
--- a/test/hotspot/jtreg/gc/shenandoah/jvmti/TestHeapDump.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/hotspot/jtreg/gc/shenandoah/jvmti/TestHeapDump.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2020, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
@@ -40,6 +40,15 @@
  * @run main/othervm/native/timeout=300 -agentlib:TestHeapDump -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx128m -XX:ShenandoahGCHeuristics=aggressive -XX:-UseCompressedOops TestHeapDump
  */
 
+/**
+ * @test TestHeapDump
+ * @summary Tests JVMTI heap dumps
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @compile TestHeapDump.java
+ * @run main/othervm/native/timeout=300 -agentlib:TestHeapDump -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx128m -XX:ShenandoahGCHeuristics=aggressive                         -XX:+UseStringDeduplication TestHeapDump
+ */
+
 import java.lang.ref.Reference;
 
 public class TestHeapDump {
--- a/test/hotspot/jtreg/gc/shenandoah/oom/TestThreadFailure.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/hotspot/jtreg/gc/shenandoah/oom/TestThreadFailure.java	Wed Jan 15 01:54:35 2020 +0000
@@ -63,7 +63,7 @@
 
         {
             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
-                    "-Xmx64m",
+                    "-Xmx32m",
                     "-XX:+UnlockExperimentalVMOptions",
                     "-XX:+UseShenandoahGC",
                     TestThreadFailure.class.getName(),
--- a/test/hotspot/jtreg/serviceability/jvmti/CompiledMethodLoad/libCompiledZombie.cpp	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/hotspot/jtreg/serviceability/jvmti/CompiledMethodLoad/libCompiledZombie.cpp	Wed Jan 15 01:54:35 2020 +0000
@@ -67,7 +67,8 @@
     jvmti->RunAgentThread(agent_thread, GenerateEventsThread, NULL, JVMTI_THREAD_NORM_PRIORITY);
 }
 
-jint Agent_OnLoad(JavaVM* vm, char* options, void* reserved) {
+JNIEXPORT
+jint JNICALL Agent_OnLoad(JavaVM* vm, char* options, void* reserved) {
     jvmtiEnv* jvmti;
     vm->GetEnv((void**)&jvmti, JVMTI_VERSION_1_0);
 
--- a/test/jdk/java/foreign/TestArrays.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/foreign/TestArrays.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  *  This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,7 @@
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 
+import org.testng.SkipException;
 import org.testng.annotations.*;
 import static org.testng.Assert.*;
 
@@ -76,8 +77,8 @@
     static VarHandle shortHandle = shorts.varHandle(short.class, PathElement.sequenceElement());
     static VarHandle intHandle = ints.varHandle(int.class, PathElement.sequenceElement());
     static VarHandle floatHandle = floats.varHandle(float.class, PathElement.sequenceElement());
-    static VarHandle longHandle = doubles.varHandle(long.class, PathElement.sequenceElement());
-    static VarHandle doubleHandle = longs.varHandle(double.class, PathElement.sequenceElement());
+    static VarHandle longHandle = longs.varHandle(long.class, PathElement.sequenceElement());
+    static VarHandle doubleHandle = doubles.varHandle(double.class, PathElement.sequenceElement());
 
     static void initBytes(MemoryAddress base, SequenceLayout seq, BiConsumer<MemoryAddress, Long> handleSetter) {
         for (long i = 0; i < seq.elementCount().getAsLong() ; i++) {
@@ -103,8 +104,13 @@
         }
     }
 
-    @Test(expectedExceptions = UnsupportedOperationException.class)
+    @Test(expectedExceptions = { UnsupportedOperationException.class,
+                                 OutOfMemoryError.class })
     public void testTooBigForArray() {
+        if (System.getProperty("sun.arch.data.model").equals("32")) {
+            throw new SkipException("32-bit Unsafe does not support this allocation size");
+        }
+
         MemorySegment.allocateNative((long) Integer.MAX_VALUE * 2).toByteArray();
     }
 
--- a/test/jdk/java/foreign/TestByteBuffer.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/foreign/TestByteBuffer.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,6 +70,7 @@
 import java.util.stream.Stream;
 
 import jdk.internal.foreign.MemoryAddressImpl;
+import org.testng.SkipException;
 import org.testng.annotations.*;
 import sun.nio.ch.DirectBuffer;
 
@@ -119,8 +120,8 @@
     static VarHandle shortHandle = shorts.varHandle(short.class, PathElement.sequenceElement());
     static VarHandle intHandle = ints.varHandle(int.class, PathElement.sequenceElement());
     static VarHandle floatHandle = floats.varHandle(float.class, PathElement.sequenceElement());
-    static VarHandle longHandle = doubles.varHandle(long.class, PathElement.sequenceElement());
-    static VarHandle doubleHandle = longs.varHandle(double.class, PathElement.sequenceElement());
+    static VarHandle longHandle = longs.varHandle(long.class, PathElement.sequenceElement());
+    static VarHandle doubleHandle = doubles.varHandle(double.class, PathElement.sequenceElement());
 
 
     static void initTuples(MemoryAddress base) {
@@ -247,6 +248,13 @@
         }
     }
 
+    static void checkByteArrayAlignment(MemoryLayout layout) {
+        if (layout.bitSize() > 32
+                && System.getProperty("sun.arch.data.model").equals("32")) {
+            throw new SkipException("avoid unaligned access on 32-bit system");
+        }
+    }
+
     @Test(dataProvider = "bufferOps")
     public void testScopedBuffer(Function<ByteBuffer, Buffer> bufferFactory, Map<Method, Object[]> members) {
         Buffer bb;
@@ -338,6 +346,7 @@
 
     @Test(dataProvider="resizeOps")
     public void testResizeHeap(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
+        checkByteArrayAlignment(seq.elementLayout());
         int capacity = (int)seq.byteSize();
         MemoryAddress base = MemorySegment.ofArray(new byte[capacity]).baseAddress();
         initializer.accept(base);
@@ -346,6 +355,7 @@
 
     @Test(dataProvider="resizeOps")
     public void testResizeBuffer(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
+        checkByteArrayAlignment(seq.elementLayout());
         int capacity = (int)seq.byteSize();
         MemoryAddress base = MemorySegment.ofByteBuffer(ByteBuffer.wrap(new byte[capacity])).baseAddress();
         initializer.accept(base);
@@ -354,6 +364,7 @@
 
     @Test(dataProvider="resizeOps")
     public void testResizeRoundtripHeap(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
+        checkByteArrayAlignment(seq.elementLayout());
         int capacity = (int)seq.byteSize();
         byte[] arr = new byte[capacity];
         MemorySegment segment = MemorySegment.ofArray(arr);
@@ -382,13 +393,19 @@
         leaked.asByteBuffer();
     }
 
-    @Test(expectedExceptions = UnsupportedOperationException.class)
+    @Test(expectedExceptions = { UnsupportedOperationException.class,
+                                 OutOfMemoryError.class })
     public void testTooBigForByteBuffer() {
+        if (System.getProperty("sun.arch.data.model").equals("32")) {
+            throw new SkipException("32-bit Unsafe does not support this allocation size");
+        }
+
         MemorySegment.allocateNative((long) Integer.MAX_VALUE * 2).asByteBuffer();
     }
 
     @Test(dataProvider="resizeOps")
     public void testCopyHeapToNative(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
+        checkByteArrayAlignment(seq.elementLayout());
         int bytes = (int)seq.byteSize();
         try (MemorySegment nativeArray = MemorySegment.allocateNative(bytes);
              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
@@ -400,6 +417,7 @@
 
     @Test(dataProvider="resizeOps")
     public void testCopyNativeToHeap(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
+        checkByteArrayAlignment(seq.elementLayout());
         int bytes = (int)seq.byteSize();
         try (MemorySegment nativeArray = MemorySegment.allocateNative(seq);
              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
--- a/test/jdk/java/foreign/TestMemoryAlignment.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/foreign/TestMemoryAlignment.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ *  Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  *  This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
 
 /*
  * @test
+ * @requires vm.bits != "32"
  * @run testng TestMemoryAlignment
  */
 
--- a/test/jdk/java/foreign/TestSegments.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/foreign/TestSegments.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ *  Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  *  This code is free software; you can redistribute it and/or modify it
@@ -58,7 +58,8 @@
         MemorySegment.allocateNative(layout);
     }
 
-    @Test(expectedExceptions = OutOfMemoryError.class)
+    @Test(expectedExceptions = { OutOfMemoryError.class,
+                                 IllegalArgumentException.class })
     public void testAllocateTooBig() {
         MemorySegment.allocateNative(Long.MAX_VALUE);
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/foreign/TestTypeAccess.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ *  This code is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 only, as
+ *  published by the Free Software Foundation.
+ *
+ *  This code is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  version 2 for more details (a copy is included in the LICENSE file that
+ *  accompanied this code).
+ *
+ *  You should have received a copy of the GNU General Public License version
+ *  2 along with this work; if not, write to the Free Software Foundation,
+ *  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ *   Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ *  or visit www.oracle.com if you need additional information or have any
+ *  questions.
+ *
+ */
+
+/*
+ * @test
+ * @run testng TestTypeAccess
+ */
+
+import jdk.incubator.foreign.MemorySegment;
+import jdk.incubator.foreign.MemoryLayouts;
+import org.testng.annotations.*;
+
+import java.lang.invoke.VarHandle;
+import java.lang.invoke.WrongMethodTypeException;
+
+public class TestTypeAccess {
+
+    static final VarHandle INT_HANDLE = MemoryLayouts.JAVA_INT.varHandle(int.class);
+
+    @Test(expectedExceptions=ClassCastException.class)
+    public void testMemoryAddressCoordinateAsString() {
+        try (MemorySegment s = MemorySegment.allocateNative(8)) {
+            int v = (int)INT_HANDLE.get("string");
+        }
+    }
+
+    @Test(expectedExceptions=WrongMethodTypeException.class)
+    public void testMemoryCoordinatePrimitive() {
+        try (MemorySegment s = MemorySegment.allocateNative(8)) {
+            int v = (int)INT_HANDLE.get(1);
+        }
+    }
+}
--- a/test/jdk/java/foreign/libNativeAccess.c	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/foreign/libNativeAccess.c	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ *  Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  *  This code is free software; you can redistribute it and/or modify it
@@ -16,7 +16,7 @@
  *  2 along with this work; if not, write to the Free Software Foundation,
  *  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *   Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ *  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  *  or visit www.oracle.com if you need additional information or have any
  *  questions.
  *
@@ -24,88 +24,89 @@
 
 #include "jni.h"
 #include <stdio.h>
+#include <stdint.h>
 
 JNIEXPORT jbyte JNICALL
 Java_TestNative_getByteRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jbyte *arr = (jbyte*)addr;
+    jbyte *arr = (jbyte*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jbyte JNICALL
 Java_TestNative_getByteBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getByteRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jchar JNICALL
 Java_TestNative_getCharRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jchar *arr = (jchar*)addr;
+    jchar *arr = (jchar*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jchar JNICALL
 Java_TestNative_getCharBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getCharRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jshort JNICALL
 Java_TestNative_getShortRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jshort *arr = (jshort*)addr;
+    jshort *arr = (jshort*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jshort JNICALL
 Java_TestNative_getShortBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getShortRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jint JNICALL
 Java_TestNative_getIntRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jint *arr = (jint*)addr;
+    jint *arr = (jint*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jint JNICALL
 Java_TestNative_getIntBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getIntRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jfloat JNICALL
 Java_TestNative_getFloatRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jfloat *arr = (jfloat*)addr;
+    jfloat *arr = (jfloat*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jfloat JNICALL
 Java_TestNative_getFloatBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getFloatRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jlong JNICALL
 Java_TestNative_getLongRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jlong *arr = (jlong*)addr;
+    jlong *arr = (jlong*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jlong JNICALL
 Java_TestNative_getLongBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getLongRaw(env, cls, addr, index);
 }
 
 JNIEXPORT jdouble JNICALL
 Java_TestNative_getDoubleRaw(JNIEnv *env, jclass cls, jlong addr, jint index) {
-    jdouble *arr = (jdouble*)addr;
+    jdouble *arr = (jdouble*)(uintptr_t)addr;
     return arr[index];
 }
 
 JNIEXPORT jdouble JNICALL
 Java_TestNative_getDoubleBuffer(JNIEnv *env, jclass cls, jobject buf, jint index) {
-    jlong addr = (jlong)(*env)->GetDirectBufferAddress(env, buf);
+    jlong addr = (jlong)(uintptr_t)(*env)->GetDirectBufferAddress(env, buf);
     return Java_TestNative_getDoubleRaw(env, cls, addr, index);
 }
 
--- a/test/jdk/java/nio/Buffer/Basic-X.java.template	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/nio/Buffer/Basic-X.java.template	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,16 @@
 
 #warn This file is preprocessed before being compiled
 
+#if[byte]
+import java.io.IOException;
+import java.io.UncheckedIOException;
+#end[byte]
 import java.nio.*;
+#if[byte]
+import java.nio.channels.FileChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+#end[byte]
 
 
 public class Basic$Type$
@@ -469,6 +478,41 @@
                 }
             }
         }
+
+        // mapped buffers
+        try {
+            for (MappedByteBuffer bb : mappedBuffers()) {
+                try {
+                    int offset = bb.alignmentOffset(1, 4);
+                    ck(bb, offset >= 0);
+                } catch (UnsupportedOperationException e) {
+                    System.out.println("Not applicable, UOE thrown: ");
+                }
+            }
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private static MappedByteBuffer[] mappedBuffers() throws IOException {
+        return new MappedByteBuffer[]{
+                createMappedBuffer(new byte[]{0, 1, 2, 3}),
+                createMappedBuffer(new byte[]{0, 1, 2, -3,
+                    45, 6, 7, 78, 3, -7, 6, 7, -128, 127}),
+        };
+    }
+
+    private static MappedByteBuffer createMappedBuffer(byte[] contents)
+        throws IOException {
+        Path tempFile = Files.createTempFile("mbb", null);
+        tempFile.toFile().deleteOnExit();
+        Files.write(tempFile, contents);
+        try (FileChannel fc = FileChannel.open(tempFile)) {
+            MappedByteBuffer map =
+                fc.map(FileChannel.MapMode.READ_ONLY, 0, contents.length);
+            map.load();
+            return map;
+        }
     }
 #end[byte]
 
--- a/test/jdk/java/nio/Buffer/BasicByte.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/java/nio/Buffer/BasicByte.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,17 @@
 
 // -- This file was mechanically generated: Do not edit! -- //
 
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+
 import java.nio.*;
 
+import java.nio.channels.FileChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+
 
 public class BasicByte
     extends Basic
@@ -469,6 +478,41 @@
                 }
             }
         }
+
+        // mapped buffers
+        try {
+            for (MappedByteBuffer bb : mappedBuffers()) {
+                try {
+                    int offset = bb.alignmentOffset(1, 4);
+                    ck(bb, offset >= 0);
+                } catch (UnsupportedOperationException e) {
+                    System.out.println("Not applicable, UOE thrown: ");
+                }
+            }
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private static MappedByteBuffer[] mappedBuffers() throws IOException {
+        return new MappedByteBuffer[]{
+                createMappedBuffer(new byte[]{0, 1, 2, 3}),
+                createMappedBuffer(new byte[]{0, 1, 2, -3,
+                    45, 6, 7, 78, 3, -7, 6, 7, -128, 127}),
+        };
+    }
+
+    private static MappedByteBuffer createMappedBuffer(byte[] contents)
+        throws IOException {
+        Path tempFile = Files.createTempFile("mbb", null);
+        tempFile.toFile().deleteOnExit();
+        Files.write(tempFile, contents);
+        try (FileChannel fc = FileChannel.open(tempFile)) {
+            MappedByteBuffer map =
+                fc.map(FileChannel.MapMode.READ_ONLY, 0, contents.length);
+            map.load();
+            return map;
+        }
     }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/channels/FileChannel/MapWithSecurityManager.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8236582
+ * @summary Tests the map method when running with a security manager
+ * @run main/othervm MapWithSecurityManager
+ */
+
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class MapWithSecurityManager {
+    public static void main(String[] args) throws IOException {
+        Path tempFile = Files.createTempFile("test", "test");
+        try (FileChannel ch = FileChannel.open(tempFile)) {
+             System.setSecurityManager(new SecurityManager());
+             ch.map(FileChannel.MapMode.READ_ONLY, 0, 0);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/ArrayList/SubListModCount.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8234423
+ * @summary Modifying ArrayList.subList().subList() resets modCount of subList
+ */
+
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+
+public class SubListModCount {
+    public static void main(String[] args) {
+        int failures = 0;
+        var root = new ArrayList<Integer>();
+        var subList = root.subList(0, 0);
+        root.add(42);
+        try {
+            subList.size();
+            failures++;
+            System.out.println("Accessing subList");
+        } catch (ConcurrentModificationException expected) {
+        }
+        var subSubList = subList.subList(0, 0);
+        try {
+            subSubList.size();
+            failures++;
+            System.out.println("Accessing subList.subList");
+        } catch (ConcurrentModificationException expected) {
+        }
+        try {
+            subSubList.add(42);
+            failures++;
+            System.out.println("Modifying subList.subList");
+        } catch (ConcurrentModificationException expected) {
+        }
+        try {
+            subList.size();
+            failures++;
+            System.out.println("Accessing subList again");
+        } catch (ConcurrentModificationException expected) {
+        }
+        if (failures > 0) {
+            throw new AssertionError(failures + " tests failed");
+        }
+    }
+}
--- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -78,7 +78,6 @@
             CountDownLatch closed = new CountDownLatch(1);
             AtomicInteger count = new AtomicInteger();
             try (RecordingStream rs = new RecordingStream()) {
-                rs.setFlushInterval(Duration.ofSeconds(1));
                 rs.onEvent(e -> {
                     count.incrementAndGet();
                 });
--- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetFlushInterval.java	Thu Jan 09 20:16:21 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.jfr.api.consumer.recordingstream;
-
-import java.time.Duration;
-
-import jdk.jfr.consumer.RecordingStream;
-import jdk.test.lib.jfr.EventNames;
-
-/**
- * @test
- * @summary Tests RecordingStream::setFlushInterval
- * @key jfr
- * @requires vm.hasJFR
- * @library /test/lib
- * @run main/othervm jdk.jfr.api.consumer.recordingstream.TestSetFlushInterval
- */
-public class TestSetFlushInterval {
-
-    public static void main(String... args) throws Exception {
-        Duration expectedDuration = Duration.ofMillis(1001);
-        try (RecordingStream r = new RecordingStream()) {
-            r.setFlushInterval(expectedDuration);
-            r.enable(EventNames.ActiveRecording);
-            r.onEvent(e -> {
-                System.out.println(e);
-                Duration duration = e.getDuration("flushInterval");
-                if (expectedDuration.equals(duration)) {
-                    System.out.println("Closing recording");
-                    r.close();
-                    return;
-                }
-                System.out.println("Flush interval not set, was " + duration +
-                                   ", but expected " + expectedDuration);
-            });
-            r.start();
-        }
-    }
-}
--- a/test/jdk/jdk/jfr/api/consumer/security/TestStreamingRemote.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/jdk/jfr/api/consumer/security/TestStreamingRemote.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -74,7 +74,6 @@
 
     public static void main(String... args) throws Exception {
         try (Recording r = new Recording()) {
-            r.setFlushInterval(Duration.ofSeconds(1));
             r.start();
             String repository = System.getProperty("jdk.jfr.repository");
             Path policy = createPolicyFile(repository);
--- a/test/jdk/jdk/jfr/api/consumer/streaming/TestInProcessMigration.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/jdk/jfr/api/consumer/streaming/TestInProcessMigration.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,7 +71,6 @@
             System.out.println("Started es.startAsync()");
 
             try (Recording r = new Recording()) {
-                r.setFlushInterval(Duration.ofSeconds(1));
                 r.start();
                 // Chunk in default repository
                 MigrationEvent e1 = new MigrationEvent();
--- a/test/jdk/jdk/jfr/api/recording/time/TestSetFlushInterval.java	Thu Jan 09 20:16:21 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.jfr.api.recording.time;
-
-import java.time.Duration;
-import java.util.concurrent.CountDownLatch;
-
-import jdk.jfr.Recording;
-import jdk.jfr.consumer.EventStream;
-import jdk.test.lib.Asserts;
-
-/**
- * @test
- * @key jfr
- * @summary Test Recording::SetFlushInterval(...) and
- *          Recording::getFlushInterval()
- * @requires vm.hasJFR
- * @library /test/lib
- * @run main/othervm jdk.jfr.api.recording.time.TestSetFlushInterval
- */
-
-public class TestSetFlushInterval {
-
-    public static void main(String[] args) throws Throwable {
-        testSetGet();
-        testSetNull();
-        testFlush();
-    }
-
-    static void testFlush() throws Exception {
-        CountDownLatch flush = new CountDownLatch(1);
-        try (EventStream es = EventStream.openRepository()) {
-            es.onFlush(() -> {
-                flush.countDown();
-            });
-            es.startAsync();
-            try (Recording r = new Recording()) {
-                r.setFlushInterval(Duration.ofSeconds(1));
-                r.start();
-                flush.await();
-            }
-        }
-    }
-
-    static void testSetNull() {
-        try (Recording r = new Recording()) {
-            r.setFlushInterval(null);
-            Asserts.fail("Expected NullPointerException");
-        } catch (NullPointerException npe) {
-            // as expected
-        }
-    }
-
-    static void testSetGet() {
-        try (Recording r = new Recording()) {
-            Duration a = Duration.ofNanos(21378461289374646L);
-            r.setFlushInterval(a);
-            Duration b = r.getFlushInterval();
-            Asserts.assertEQ(a, b);
-        }
-    }
-
-}
--- a/test/jdk/jdk/jfr/startupargs/TestFlushInterval.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/jdk/jfr/startupargs/TestFlushInterval.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
 
 import jdk.jfr.FlightRecorder;
 import jdk.jfr.Recording;
+import jdk.jfr.internal.PlatformRecording;
+import jdk.jfr.internal.PrivateAccess;
 
 /**
  * @test
@@ -36,14 +38,17 @@
  * @key jfr
  * @requires vm.hasJFR
  * @library /test/lib /test/jdk
- * @run main/othervm -XX:StartFlightRecording=flush-interval=1s jdk.jfr.startupargs.TestFlushInterval
+ * @modules jdk.jfr/jdk.jfr.internal
+ * @run main/othervm -XX:StartFlightRecording=flush-interval=2s jdk.jfr.startupargs.TestFlushInterval
  */
 public class TestFlushInterval {
 
     public static void main(String[] args) throws Exception {
         for (Recording r : FlightRecorder.getFlightRecorder().getRecordings()) {
-            Duration d = r.getFlushInterval();
-            if (d.equals(Duration.ofSeconds(1))) {
+            PrivateAccess p = PrivateAccess.getInstance();
+            PlatformRecording pr = p.getPlatformRecording(r);
+            Duration d = pr.getFlushInterval();
+            if (d.equals(Duration.ofSeconds(2))) {
                 return; //OK
             } else {
                 throw new Exception("Unexpected flush-interval " + d);
--- a/test/jdk/tools/jimage/JImageTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/tools/jimage/JImageTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,6 +45,7 @@
  * jimage testing.
  * @test
  * @summary Test jimage tool
+ * @bug 8222100
  * @library ../lib
  * @modules java.base/jdk.internal.jimage
  *          jdk.jdeps/com.sun.tools.classfile
@@ -54,7 +55,7 @@
  *          jdk.compiler
  * @run build JImageTest
  * @run build tests.*
- * @run main/othervm -verbose:gc -Xmx1g JImageTest
+ * @run main/othervm/timeout=360 -verbose:gc -Xmx1g JImageTest
 */
 public class JImageTest {
 
--- a/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
 /*
  * @test
  * @bug 8152143 8152704 8155649 8165804 8185841 8176841 8190918
- *      8179071 8202537 8221432
+ *      8179071 8202537 8221432 8222098
  * @summary IncludeLocalesPlugin tests
  * @author Naoto Sato
  * @requires (vm.compMode != "Xcomp" & os.maxMemory >= 2g)
@@ -56,7 +56,7 @@
  *          jdk.compiler
  * @build tests.*
  * @build tools.jlink.plugins.GetAvailableLocales
- * @run main/othervm -Xmx1g IncludeLocalesPluginTest
+ * @run main/othervm/timeout=180 -Xmx1g IncludeLocalesPluginTest
  */
 public class IncludeLocalesPluginTest {
 
--- a/test/langtools/jdk/jshell/RecordsTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/jdk/jshell/RecordsTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8235474
+ * @bug 8235474 8236715
  * @summary Tests for evalution of records
  * @modules jdk.jshell
  * @build KullaTesting TestingInputStream ExpectedDiagnostic
@@ -33,6 +33,8 @@
 import org.testng.annotations.Test;
 
 import javax.lang.model.SourceVersion;
+import jdk.jshell.Snippet.Status;
+import jdk.jshell.UnresolvedReferenceException;
 import static org.testng.Assert.assertEquals;
 import org.testng.annotations.BeforeMethod;
 
@@ -46,6 +48,24 @@
         assertEval("r.i()", "42");
     }
 
+    public void testRecordCorralling() {
+        //simple record with a mistake that can be fixed by corralling:
+        assertEval("record R1(int i) { int g() { return j; } }", ste(MAIN_SNIPPET, Status.NONEXISTENT, Status.RECOVERABLE_DEFINED, true, null));
+        assertEval("R1 r1 = new R1(1);", null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, added(Status.VALID));
+        //record with a concise constructor and a mistake take can be fixed by corralling:
+        assertEval("record R2(int i) { public R2 {} int g() { return j; } }", ste(MAIN_SNIPPET, Status.NONEXISTENT, Status.RECOVERABLE_DEFINED, true, null));
+        assertEval("R2 r2 = new R2(1);", null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, added(Status.VALID));
+        //record with a full constructor and a mistake take can be fixed by corralling:
+        assertEval("record R3(int i) { public R3(int i) {this.i = i;} int g() { return j; } }", ste(MAIN_SNIPPET, Status.NONEXISTENT, Status.RECOVERABLE_DEFINED, true, null));
+        assertEval("R3 r3 = new R3(1);", null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, added(Status.VALID));
+        //record with an accessor and a mistake take can be fixed by corralling:
+        assertEval("record R4(int i) { public int i() { return i; } int g() { return j; } }", ste(MAIN_SNIPPET, Status.NONEXISTENT, Status.RECOVERABLE_DEFINED, true, null));
+        assertEval("R4 r4 = new R4(1);", null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, added(Status.VALID));
+        //record with an accessor with a mistake take can be fixed by corralling:
+        assertEval("record R5(int i) { public int i() { return j; } }", ste(MAIN_SNIPPET, Status.NONEXISTENT, Status.RECOVERABLE_DEFINED, true, null));
+        assertEval("R5 r5 = new R5(1);", null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, added(Status.VALID));
+    }
+
     public void testRecordField() {
         assertEquals(varKey(assertEval("String record = \"\";")).name(), "record");
         assertEval("record.length()", "0");
--- a/test/langtools/jdk/jshell/ToolLocalSimpleTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/jdk/jshell/ToolLocalSimpleTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -100,4 +100,8 @@
         // can't set --enable-preview for local, ignore
     }
 
+    @Override
+    public void testRecords() {
+        // can't set --enable-preview for local, ignore
+    }
 }
--- a/test/langtools/jdk/jshell/ToolSimpleTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/jdk/jshell/ToolSimpleTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103  8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466 8172154 8192979 8191842 8198573 8198801 8210596 8210959 8215099 8199623
+ * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103  8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466 8172154 8192979 8191842 8198573 8198801 8210596 8210959 8215099 8199623 8236715
  * @summary Simple jshell tool tests
  * @modules jdk.compiler/com.sun.tools.javac.api
  *          jdk.compiler/com.sun.tools.javac.main
@@ -902,4 +902,14 @@
                 a -> assertCommandOutputContains(a, "a", "A@")
         );
     }
+
+    @Test
+    public void testRecords() {
+        test(new String[] {"--enable-preview"},
+                (a) -> assertCommandOutputContains(a, "record R(int i) { public int g() { return j; } }",
+                        "|  created record R, however, it cannot be instantiated or its methods invoked until variable j is declared"),
+                (a) -> assertCommandOutputContains(a, "new R(0)",
+                        "|  attempted to use record R which cannot be instantiated or its methods invoked until variable j is declared")
+        );
+    }
 }
--- a/test/langtools/tools/javac/patterns/BindingsExistTest.out	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/patterns/BindingsExistTest.out	Wed Jan 15 01:54:35 2020 +0000
@@ -1,4 +1,4 @@
-BindingsExistTest.java:9:36: compiler.err.match.binding.exists
+BindingsExistTest.java:9:61: compiler.err.match.binding.exists
 BindingsExistTest.java:11:36: compiler.err.match.binding.exists
 BindingsExistTest.java:16:35: compiler.err.already.defined: kindname.variable, k, kindname.method, t(java.lang.Object,java.lang.Object)
 BindingsExistTest.java:19:34: compiler.err.already.defined: kindname.variable, s2, kindname.method, t(java.lang.Object,java.lang.Object)
--- a/test/langtools/tools/javac/patterns/BindingsTest1.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/patterns/BindingsTest1.java	Wed Jan 15 01:54:35 2020 +0000
@@ -188,6 +188,41 @@
         boolean result = (o1 instanceof String a1) ? (o1 instanceof String a2) : (!(o1 instanceof String a3));
         boolean result2 = (o1 instanceof String a1) ? (o1 instanceof String a2) : (!(switch (0) { default -> false; }));
 
+        //binding in an expression lambda:
+        if (!((VoidPredicate) () -> o1 instanceof String str && !str.isEmpty()).get()) {
+            throw new AssertionError();
+        }
+
+        //binding in an block lambda:
+        if (!((VoidPredicate) () -> o1 instanceof String str && !str.isEmpty()).get()) {
+            throw new AssertionError();
+        }
+
+        //binding in an anonymous class:
+        if (!new VoidPredicate() { public boolean get() { return o1 instanceof String str && !str.isEmpty();} }.get()) {
+            throw new AssertionError();
+        }
+
+        if (!switch (i) {
+            default:
+                if (!(o1 instanceof String str)) {
+                    yield false;
+                }
+                if (str.isEmpty()) {
+                    yield true;
+                }
+                yield true;
+            }) {
+            throw new AssertionError();
+        }
+
         System.out.println("BindingsTest1 complete");
     }
+
+    interface VoidPredicate {
+        public boolean get();
+    }
+    static boolean id(boolean b) {
+        return b;
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/patterns/ConditionalTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8236670
+ * @summary Verify proper scope of binding related to loops and breaks.
+ * @library /tools/lib /tools/javac/lib
+ * @modules
+ *      java.base/jdk.internal
+ *      jdk.compiler/com.sun.tools.javac.api
+ *      jdk.compiler/com.sun.tools.javac.file
+ *      jdk.compiler/com.sun.tools.javac.main
+ *      jdk.compiler/com.sun.tools.javac.util
+ * @build toolbox.ToolBox toolbox.JavacTask
+ * @build combo.ComboTestHelper
+ * @compile --enable-preview -source ${jdk.version} ConditionalTest.java
+ * @run main/othervm --enable-preview ConditionalTest
+ */
+
+import combo.ComboInstance;
+import combo.ComboParameter;
+import combo.ComboTask;
+import combo.ComboTestHelper;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import toolbox.ToolBox;
+
+public class ConditionalTest extends ComboInstance<ConditionalTest> {
+    protected ToolBox tb;
+
+    ConditionalTest() {
+        super();
+        tb = new ToolBox();
+    }
+
+    public static void main(String... args) throws Exception {
+        new ComboTestHelper<ConditionalTest>()
+                .withDimension("COND", (x, cond) -> x.cond = cond, Pattern.values())
+                .withDimension("TRUE", (x, trueSec) -> x.trueSec = trueSec, Pattern.values())
+                .withDimension("FALSE", (x, falseSec) -> x.falseSec = falseSec, Pattern.values())
+                .run(ConditionalTest::new);
+    }
+
+    private Pattern cond;
+    private Pattern trueSec;
+    private Pattern falseSec;
+
+    private static final String MAIN_TEMPLATE =
+            """
+            public class Test {
+                public static boolean doTest(Object o, boolean b) {
+                    return #{COND} ? #{TRUE} : #{FALSE}
+                }
+            }
+            """;
+
+    @Override
+    protected void doWork() throws Throwable {
+        Path base = Paths.get(".");
+
+        ComboTask task = newCompilationTask()
+                .withSourceFromTemplate(MAIN_TEMPLATE, pname -> switch (pname) {
+                        case "COND" -> cond;
+                        case "TRUE" -> trueSec;
+                        case "FALSE" -> falseSec;
+                        default -> throw new UnsupportedOperationException(pname);
+                    })
+                .withOption("--enable-preview")
+                .withOption("-source")
+                .withOption(String.valueOf(Runtime.version().feature()));
+
+        task.analyze(result -> {
+            boolean shouldPass;
+            if (cond == Pattern.TRUE && (trueSec == Pattern.TRUE || trueSec == Pattern.FALSE)) { //6 cases covered
+                shouldPass = false; //already in scope in true section
+            } else if (cond == Pattern.FALSE && (falseSec == Pattern.TRUE || falseSec == Pattern.FALSE)) { //6 cases covered
+                shouldPass = false; //already in scope in false section
+            } else if (cond == Pattern.TRUE && falseSec == Pattern.TRUE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (cond == Pattern.FALSE && trueSec == Pattern.TRUE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (trueSec == Pattern.TRUE && falseSec == Pattern.TRUE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (trueSec == Pattern.TRUE && falseSec == Pattern.TRUE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (cond == Pattern.TRUE && falseSec == Pattern.FALSE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (cond == Pattern.FALSE && trueSec == Pattern.FALSE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else if (trueSec == Pattern.FALSE && falseSec == Pattern.FALSE) {
+                shouldPass = false; //JLS 6.3.1.4
+            } else {
+                shouldPass = true;
+            }
+
+            if (!shouldPass) {
+                result.containsKey("Blabla");
+            }
+        });
+    }
+
+    public enum Pattern implements ComboParameter {
+        NONE("b"),
+        TRUE("o instanceof String s"),
+        FALSE("!(o instanceof String s)");
+        private final String code;
+
+        private Pattern(String code) {
+            this.code = code;
+        }
+
+        @Override
+        public String expand(String optParameter) {
+            return code;
+        }
+    }
+
+}
--- a/test/langtools/tools/javac/patterns/DuplicateBindingTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/patterns/DuplicateBindingTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -9,7 +9,7 @@
 
     int f;
 
-    public static void main(String[] args) {
+    public static boolean main(String[] args) {
 
         if (args != null) {
             int s;
@@ -18,5 +18,45 @@
             if (args[0] instanceof String f) { // OK to redef field.
             }
         }
+
+        Object o1 = "";
+        Object o2 = "";
+
+        if (o1 instanceof String s && o2 instanceof String s) {} //error - already in scope on RHS (in scope due to LHS when true)
+        if (o1 instanceof String s && !(o2 instanceof String s)) {} //error - already in scope on RHS (in scope due to LHS when true)
+        if (!(o1 instanceof String s) && !(o2 instanceof String s)) {} //error - the same binding variable on LHS and RHS when false
+        if (!(o1 instanceof String s) && (o2 instanceof String s)) {} //ok
+
+        if (!(o1 instanceof String s) || o2 instanceof String s) {} //error - already in scope on RHS (in scope due to LHS when false)
+        if (!(o1 instanceof String s) || !(o2 instanceof String s)) {} //error - already in scope on RHS (in scope due to LHS when false)
+        if (o1 instanceof String s || o2 instanceof String s) {} //error - the same binding variable on LHS and RHS when true
+        if (o1 instanceof String s || !(o2 instanceof String s)) {} //ok
+
+        if (o1 instanceof String s ? o2 instanceof String s : true) {} //error - already in scope in the true section (due to condition when true)
+        if (o1 instanceof String s ? true : o2 instanceof String s) {} //error - the same binding variable in condition when true and false section when true
+        if (!(o1 instanceof String s) ? o2 instanceof String s : true) {} //error - the same binding variable in condition when false and true section when true
+        if (args.length == 1 ? o2 instanceof String s : o2 instanceof String s) {} //error - the same binding variable in true section when true and false section when true
+        if (o1 instanceof String s ? true : !(o2 instanceof String s)) {} //error - the same binding variable in condition when true and false section when false
+        if (!(o1 instanceof String s) ? !(o2 instanceof String s) : true) {} //error - the same binding variable in condition when false and true section when false
+        if (args.length == 1 ? !(o2 instanceof String s) : !(o2 instanceof String s)) {} //error - the same binding variable in true section when false and false section when false
+
+        //verify that errors are reported to clashes in expression in non-conditional statements:
+        boolean b = o1 instanceof String s && o2 instanceof String s;
+        b = o1 instanceof String s && o2 instanceof String s;
+        b &= o1 instanceof String s && o2 instanceof String s;
+        assert o1 instanceof String s && o2 instanceof String s;
+        testMethod(o1 instanceof String s && o2 instanceof String s, false);
+        b = switch (args.length) { default -> o1 instanceof String s && o2 instanceof String s; };
+        b = switch (args.length) { default -> { yield o1 instanceof String s && o2 instanceof String s; } };
+        if (true) return o1 instanceof String s && o2 instanceof String s;
+
+        //verify the bindings don't go through method invocation parameters or outside a lambda:
+        b = ((VoidPredicate) () -> o1 instanceof String s).get() && s.isEmpty();
+        testMethod(o1 instanceof String s, s.isEmpty());
+    }
+
+    static void testMethod(boolean b1, boolean b2) {}
+    interface VoidPredicate {
+        public boolean get();
     }
 }
--- a/test/langtools/tools/javac/patterns/DuplicateBindingTest.out	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/patterns/DuplicateBindingTest.out	Wed Jan 15 01:54:35 2020 +0000
@@ -1,4 +1,27 @@
 DuplicateBindingTest.java:16:43: compiler.err.already.defined: kindname.variable, s, kindname.method, main(java.lang.String[])
+DuplicateBindingTest.java:25:60: compiler.err.match.binding.exists
+DuplicateBindingTest.java:26:62: compiler.err.match.binding.exists
+DuplicateBindingTest.java:27:39: compiler.err.match.binding.exists
+DuplicateBindingTest.java:30:63: compiler.err.match.binding.exists
+DuplicateBindingTest.java:31:65: compiler.err.match.binding.exists
+DuplicateBindingTest.java:32:36: compiler.err.match.binding.exists
+DuplicateBindingTest.java:35:59: compiler.err.match.binding.exists
+DuplicateBindingTest.java:36:36: compiler.err.match.binding.exists
+DuplicateBindingTest.java:37:39: compiler.err.match.binding.exists
+DuplicateBindingTest.java:38:30: compiler.err.match.binding.exists
+DuplicateBindingTest.java:39:36: compiler.err.match.binding.exists
+DuplicateBindingTest.java:40:39: compiler.err.match.binding.exists
+DuplicateBindingTest.java:41:30: compiler.err.match.binding.exists
+DuplicateBindingTest.java:44:68: compiler.err.match.binding.exists
+DuplicateBindingTest.java:45:60: compiler.err.match.binding.exists
+DuplicateBindingTest.java:46:61: compiler.err.match.binding.exists
+DuplicateBindingTest.java:47:63: compiler.err.match.binding.exists
+DuplicateBindingTest.java:48:67: compiler.err.match.binding.exists
+DuplicateBindingTest.java:49:94: compiler.err.match.binding.exists
+DuplicateBindingTest.java:50:102: compiler.err.match.binding.exists
+DuplicateBindingTest.java:51:73: compiler.err.match.binding.exists
+DuplicateBindingTest.java:54:69: compiler.err.cant.resolve.location: kindname.variable, s, , , (compiler.misc.location: kindname.class, DuplicateBindingTest, null)
+DuplicateBindingTest.java:55:44: compiler.err.cant.resolve.location: kindname.variable, s, , , (compiler.misc.location: kindname.class, DuplicateBindingTest, null)
 - compiler.note.preview.filename: DuplicateBindingTest.java
 - compiler.note.preview.recompile
-1 error
+24 errors
--- a/test/langtools/tools/javac/patterns/MatchBindingScopeTest.out	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/patterns/MatchBindingScopeTest.out	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 MatchBindingScopeTest.java:19:32: compiler.err.cant.resolve.location: kindname.variable, j, , , (compiler.misc.location: kindname.class, MatchBindingScopeTest, null)
-MatchBindingScopeTest.java:23:36: compiler.err.match.binding.exists
+MatchBindingScopeTest.java:23:61: compiler.err.match.binding.exists
 MatchBindingScopeTest.java:30:32: compiler.err.cant.resolve.location: kindname.variable, j, , , (compiler.misc.location: kindname.class, MatchBindingScopeTest, null)
 MatchBindingScopeTest.java:31:32: compiler.err.cant.resolve.location: kindname.variable, k, , , (compiler.misc.location: kindname.class, MatchBindingScopeTest, null)
 MatchBindingScopeTest.java:34:39: compiler.err.cant.resolve.location: kindname.variable, j, , , (compiler.misc.location: kindname.class, MatchBindingScopeTest, null)
@@ -13,4 +13,4 @@
 MatchBindingScopeTest.java:65:23: compiler.err.cant.resolve.location: kindname.variable, j, , , (compiler.misc.location: kindname.class, MatchBindingScopeTest, null)
 - compiler.note.preview.filename: MatchBindingScopeTest.java
 - compiler.note.preview.recompile
-13 errors
+13 errors
\ No newline at end of file
--- a/test/langtools/tools/javac/records/RecordCompilationTests.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/records/RecordCompilationTests.java	Wed Jan 15 01:54:35 2020 +0000
@@ -377,10 +377,44 @@
                 "    }\n" +
                 "}");
 
-        // Capture locals from local record
+        // Cant capture locals
+        assertFail("compiler.err.non-static.cant.be.ref",
+                "class R { \n" +
+                        "    void m(int y) { \n" +
+                        "        record RR(int x) { public int x() { return y; }};\n" +
+                        "    }\n" +
+                        "}");
+
+        assertFail("compiler.err.non-static.cant.be.ref",
+                "class R { \n" +
+                        "    void m() {\n" +
+                        "        int y;\n" +
+                        "        record RR(int x) { public int x() { return y; }};\n" +
+                        "    }\n" +
+                        "}");
+
+        // instance fields
+        assertFail("compiler.err.non-static.cant.be.ref",
+                "class R { \n" +
+                        "    int z = 0;\n" +
+                        "    void m() { \n" +
+                        "        record RR(int x) { public int x() { return z; }};\n" +
+                        "    }\n" +
+                        "}");
+
+        // or type variables
+        assertFail("compiler.err.non-static.cant.be.ref",
+                "class R<T> { \n" +
+                        "    void m() { \n" +
+                        "        record RR(T t) {};\n" +
+                        "    }\n" +
+                        "}");
+
+        // but static fields are OK
         assertOK("class R { \n" +
-                "    void m(int y) { \n" +
-                "        record RR(int x) { public int x() { return y; }};\n" +
+                "    static int z = 0;\n" +
+                "    void m() { \n" +
+                "        record RR(int x) { public int x() { return z; }};\n" +
                 "    }\n" +
                 "}");
 
@@ -406,6 +440,18 @@
         // x is not DA nor DU in the body of the constructor hence error
         assertFail("compiler.err.var.might.not.have.been.initialized", "record R(int x) { # }",
                 "public R { if (x < 0) { this.x = -x; } }");
+
+        // if static fields are not DA then error
+        assertFail("compiler.err.var.might.not.have.been.initialized",
+                "record R() { # }", "static final String x;");
+
+        // ditto
+        assertFail("compiler.err.var.might.not.have.been.initialized",
+                "record R() { # }", "static final String x; public R {}");
+
+        // ditto
+        assertFail("compiler.err.var.might.not.have.been.initialized",
+                "record R(int i) { # }", "static final String x; public R {}");
     }
 
     public void testReturnInCanonical_Compact() {
@@ -417,6 +463,17 @@
         assertOK("record R(int x) { public R { Runnable r = () -> { return; };} }");
     }
 
+    public void testArgumentsAreNotFinalInCompact() {
+        assertOK(
+                """
+                record R(int x) {
+                    public R {
+                        x++;
+                    }
+                }
+                """);
+    }
+
     public void testNoNativeMethods() {
         assertFail("compiler.err.mod.not.allowed.here", "record R(int x) { # }",
                 "public native R {}");
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchEmbedding.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchEmbedding.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8214031 8214114
+ * @bug 8214031 8214114 8236546
  * @summary Verify switch expressions embedded in various statements work properly.
  * @compile ExpressionSwitchEmbedding.java
  * @run main ExpressionSwitchEmbedding
@@ -321,6 +321,13 @@
                 throw new IllegalStateException();
             }
         }
+        {
+            String s = "";
+            Object o = switch (s) { default -> s != null && s == s; };
+            if (!(Boolean) o) {
+                throw new IllegalStateException();
+            }
+        }
     }
 
     private void throwException() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/MissingDepsTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary Tests jdeps option on a MR jar with missing dependences
+ * @library ../lib
+ * @build CompilerUtils JdepsUtil
+ * @modules jdk.jdeps/com.sun.tools.jdeps
+ * @run testng MissingDepsTest
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.spi.ToolProvider;
+import java.util.stream.Stream;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+
+
+public class MissingDepsTest {
+    private static final String TEST_SRC = System.getProperty("test.src");
+    private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
+
+    private static final Path MODS_DIR = Paths.get("mods");
+    private static final Path CLASSES_DIR = Paths.get("classes");
+
+    private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar").orElseThrow();
+    private static final String VERSION = "13";
+
+    private static final Set<String> modules = Set.of("m1", "m2");
+
+    /**
+     * Compiles classes used by the test
+     */
+    @BeforeTest
+    public void compileAll() throws Exception {
+        CompilerUtils.cleanDir(MODS_DIR);
+        modules.forEach(mn ->
+                assertTrue(CompilerUtils.compileModule(SRC_DIR, MODS_DIR, mn)));
+
+        // compile a versioned class file
+        Path versionedFile = Paths.get(TEST_SRC, "p/internal/X.java");
+        assertTrue(CompilerUtils.compile(versionedFile, CLASSES_DIR, "-cp", MODS_DIR.resolve("m2").toString()));
+
+        // create a modular multi-release m1.jar
+        JAR_TOOL.run(System.out, System.err, "cf", "m1.jar",
+                     "-C", MODS_DIR.resolve("m1").toString(), ".");
+        JAR_TOOL.run(System.out, System.err, "uf", "m1.jar",
+                     "--release", VERSION, "-C", CLASSES_DIR.toString(), "p/internal/X.class");
+        // create a non-modular multi-release mr.jar
+        JAR_TOOL.run(System.out, System.err, "cf", "mr.jar",
+                     "-C", MODS_DIR.resolve("m1").toString(), "p/Foo.class",
+                     "--release", VERSION, "-C", CLASSES_DIR.toString(), "p/internal/X.class");
+    }
+
+    @Test
+    public void checkModuleDeps() {
+        JdepsTest test = new JdepsTest();
+        test.options(List.of("--module-path", "m1.jar", "--multi-release", VERSION, "--check", "m1"));
+        test.checkMissingDeps();
+        test.ignoreMissingDeps("requires java.management");
+    }
+
+    @Test
+    public void genModuleInfo() {
+        JdepsTest test = new JdepsTest();
+        test.options(List.of("--generate-module-info", ".", "--multi-release", VERSION, "mr.jar"));
+        test.checkMissingDeps();
+        Path file = Paths.get("mr", "versions", VERSION, "module-info.java");
+        test.ignoreMissingDeps(file.toString());
+        assertTrue(Files.exists(file));
+    }
+
+    @Test
+    public void listModuleDeps() {
+        JdepsTest test = new JdepsTest();
+        test.options(List.of("--list-deps", "--multi-release", VERSION, "mr.jar"));
+        test.checkMissingDeps();
+        test.ignoreMissingDeps("java.management");
+    }
+
+    class JdepsTest {
+        // set DEBUG to true to show the jdeps output
+        static final boolean DEBUG = false;
+        List<String> options;
+        JdepsTest options(List<String> options) {
+            this.options = options;
+            return this;
+        }
+
+        private void checkMissingDeps() {
+            JdepsRunner jdepsRunner = new JdepsRunner(options.toArray(new String[0]));
+            int rc = jdepsRunner.run(DEBUG);
+            assertTrue(rc != 0);
+            String regex = "\\s+13/p.internal.X\\s+->\\s+q.T\\s+not found";
+            assertTrue(Arrays.stream(jdepsRunner.output()).anyMatch(l -> l.matches(regex)));
+        }
+
+        public void ignoreMissingDeps(String expected) {
+            JdepsRunner jdepsRunner = new JdepsRunner(Stream.concat(Stream.of("--ignore-missing-deps"), options.stream())
+                                                            .toArray(String[]::new));
+            int rc = jdepsRunner.run(DEBUG);
+            assertTrue(rc == 0);
+            System.out.println("Expected: " + expected);
+            assertTrue(Arrays.stream(jdepsRunner.output()).anyMatch(l -> l.contains(expected)));
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/p/internal/X.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p.internal;
+
+import java.lang.management.*;
+
+class X implements q.T {
+    public void upTime() {
+        ManagementFactory.getRuntimeMXBean().getUptime();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/src/m1/module-info.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+module m1 {
+    requires static m2;
+    exports p;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/src/m1/p/Foo.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p;
+
+public class Foo implements Runnable {
+   public void run() {
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/src/m2/module-info.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+module m2 {
+    exports q;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/src/m2/q/Bar.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package q;
+
+public interface Bar {
+   default String name() {
+       return "";
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/missingDeps/src/m2/q/T.java	Wed Jan 15 01:54:35 2020 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package q;
+
+public interface T {
+}
--- a/test/langtools/tools/jdeps/modules/CheckModuleTest.java	Thu Jan 09 20:16:21 2020 +0000
+++ b/test/langtools/tools/jdeps/modules/CheckModuleTest.java	Wed Jan 15 01:54:35 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,7 +86,7 @@
             jdeps.appModulePath(MODS_DIR.toString());
 
             ModuleAnalyzer analyzer = jdeps.getModuleAnalyzer(Set.of(name));
-            assertTrue(analyzer.run());
+            assertTrue(analyzer.run(false));
             jdeps.dumpOutput(System.err);
 
             ModuleDescriptor[] descriptors = analyzer.descriptors(name);
@@ -146,7 +146,7 @@
             jdeps.appModulePath(MODS_DIR.toString());
 
             ModuleAnalyzer analyzer = jdeps.getModuleAnalyzer(Set.of(name));
-            assertTrue(analyzer.run());
+            assertTrue(analyzer.run(false));
             jdeps.dumpOutput(System.err);
 
             // compare the module descriptors and the suggested versions