Merge epsilon-gc-branch
authorshade
Tue, 12 Jun 2018 14:25:13 +0200
branchepsilon-gc-branch
changeset 56746 6d3a485a01dc
parent 56743 774caae3a3ce (current diff)
parent 50520 12be4323b0a5 (diff)
Merge
--- a/make/launcher/Launcher-jdk.pack.gmk	Tue Jun 12 10:01:23 2018 +0200
+++ b/make/launcher/Launcher-jdk.pack.gmk	Tue Jun 12 14:25:13 2018 +0200
@@ -90,7 +90,6 @@
     CFLAGS_linux := -fPIC, \
     CFLAGS_solaris := -KPIC, \
     CFLAGS_macosx := -fPIC, \
-    DISABLED_WARNINGS_gcc := unused-result implicit-fallthrough, \
     LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
         $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/src/hotspot/cpu/aarch64/c1_CodeStubs_aarch64.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/cpu/aarch64/c1_CodeStubs_aarch64.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -73,19 +73,20 @@
   }
 
   if (_index->is_cpu_register()) {
-    __ mov(r22, _index->as_register());
+    __ mov(rscratch1, _index->as_register());
   } else {
-    __ mov(r22, _index->as_jint());
+    __ mov(rscratch1, _index->as_jint());
   }
   Runtime1::StubID stub_id;
   if (_throw_index_out_of_bounds_exception) {
     stub_id = Runtime1::throw_index_exception_id;
   } else {
     assert(_array != NULL, "sanity");
-    __ mov(r23, _array->as_pointer_register());
+    __ mov(rscratch2, _array->as_pointer_register());
     stub_id = Runtime1::throw_range_check_failed_id;
   }
-  __ far_call(RuntimeAddress(Runtime1::entry_for(stub_id)), NULL, rscratch2);
+  __ lea(lr, RuntimeAddress(Runtime1::entry_for(stub_id)));
+  __ blr(lr);
   ce->add_call_info_here(_info);
   ce->verify_oop_map(_info);
   debug_only(__ should_not_reach_here());
--- a/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -323,7 +323,7 @@
 
 
 // target: the entry point of the method that creates and posts the exception oop
-// has_argument: true if the exception needs arguments (passed in r22 and r23)
+// has_argument: true if the exception needs arguments (passed in rscratch1 and rscratch2)
 
 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
   // make a frame and preserve the caller's caller-save registers
@@ -332,7 +332,9 @@
   if (!has_argument) {
     call_offset = __ call_RT(noreg, noreg, target);
   } else {
-    call_offset = __ call_RT(noreg, noreg, target, r22, r23);
+    __ mov(c_rarg1, rscratch1);
+    __ mov(c_rarg2, rscratch2);
+    call_offset = __ call_RT(noreg, noreg, target);
   }
   OopMapSet* oop_maps = new OopMapSet();
   oop_maps->add_gc_map(call_offset, oop_map);
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -2113,7 +2113,6 @@
 #endif
 
 void MacroAssembler::resolve_jobject(Register value, Register thread, Register tmp) {
-  BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
   Label done, not_weak;
   cbz(value, done);           // Use NULL as-is.
 
@@ -2121,15 +2120,15 @@
   tbz(r0, 0, not_weak);    // Test for jweak tag.
 
   // Resolve jweak.
-  bs->load_at(this, IN_ROOT | ON_PHANTOM_OOP_REF, T_OBJECT,
-                    value, Address(value, -JNIHandles::weak_tag_value), tmp, thread);
+  access_load_at(T_OBJECT, IN_ROOT | ON_PHANTOM_OOP_REF, value,
+                 Address(value, -JNIHandles::weak_tag_value), tmp, thread);
   verify_oop(value);
   b(done);
 
   bind(not_weak);
   // Resolve (untagged) jobject.
-  bs->load_at(this, IN_CONCURRENT_ROOT, T_OBJECT,
-                    value, Address(value, 0), tmp, thread);
+  access_load_at(T_OBJECT, IN_CONCURRENT_ROOT, value, Address(value, 0), tmp,
+                 thread);
   verify_oop(value);
   bind(done);
 }
@@ -3664,9 +3663,8 @@
 // ((OopHandle)result).resolve();
 void MacroAssembler::resolve_oop_handle(Register result, Register tmp) {
   // OopHandle::resolve is an indirection.
-  BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
-  bs->load_at(this, IN_CONCURRENT_ROOT, T_OBJECT,
-                    result, Address(result, 0), tmp, rthread);
+  access_load_at(T_OBJECT, IN_CONCURRENT_ROOT,
+                 result, Address(result, 0), tmp, noreg);
 }
 
 void MacroAssembler::load_mirror(Register dst, Register method, Register tmp) {
--- a/src/hotspot/share/code/codeCache.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/share/code/codeCache.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -1609,6 +1609,7 @@
 }
 
 void CodeCache::print_summary(outputStream* st, bool detailed) {
+  int full_count = 0;
   FOR_ALL_HEAPS(heap_iterator) {
     CodeHeap* heap = (*heap_iterator);
     size_t total = (heap->high_boundary() - heap->low_boundary());
@@ -1627,6 +1628,8 @@
                    p2i(heap->low_boundary()),
                    p2i(heap->high()),
                    p2i(heap->high_boundary()));
+
+      full_count += get_codemem_full_count(heap->code_blob_type());
     }
   }
 
@@ -1638,6 +1641,10 @@
                  "enabled" : Arguments::mode() == Arguments::_int ?
                  "disabled (interpreter mode)" :
                  "disabled (not enough contiguous free space left)");
+    st->print_cr("              stopped_count=%d, restarted_count=%d",
+                 CompileBroker::get_total_compiler_stopped_count(),
+                 CompileBroker::get_total_compiler_restarted_count());
+    st->print_cr(" full_count=%d", full_count);
   }
 }
 
--- a/src/hotspot/share/compiler/compileBroker.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/share/compiler/compileBroker.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -170,21 +170,23 @@
 elapsedTimer CompileBroker::_t_invalidated_compilation;
 elapsedTimer CompileBroker::_t_bailedout_compilation;
 
-int CompileBroker::_total_bailout_count          = 0;
-int CompileBroker::_total_invalidated_count      = 0;
-int CompileBroker::_total_compile_count          = 0;
-int CompileBroker::_total_osr_compile_count      = 0;
-int CompileBroker::_total_standard_compile_count = 0;
+int CompileBroker::_total_bailout_count            = 0;
+int CompileBroker::_total_invalidated_count        = 0;
+int CompileBroker::_total_compile_count            = 0;
+int CompileBroker::_total_osr_compile_count        = 0;
+int CompileBroker::_total_standard_compile_count   = 0;
+int CompileBroker::_total_compiler_stopped_count   = 0;
+int CompileBroker::_total_compiler_restarted_count = 0;
 
-int CompileBroker::_sum_osr_bytes_compiled       = 0;
-int CompileBroker::_sum_standard_bytes_compiled  = 0;
-int CompileBroker::_sum_nmethod_size             = 0;
-int CompileBroker::_sum_nmethod_code_size        = 0;
+int CompileBroker::_sum_osr_bytes_compiled         = 0;
+int CompileBroker::_sum_standard_bytes_compiled    = 0;
+int CompileBroker::_sum_nmethod_size               = 0;
+int CompileBroker::_sum_nmethod_code_size          = 0;
 
-long CompileBroker::_peak_compilation_time       = 0;
+long CompileBroker::_peak_compilation_time         = 0;
 
-CompileQueue* CompileBroker::_c2_compile_queue   = NULL;
-CompileQueue* CompileBroker::_c1_compile_queue   = NULL;
+CompileQueue* CompileBroker::_c2_compile_queue     = NULL;
+CompileQueue* CompileBroker::_c1_compile_queue     = NULL;
 
 
 
--- a/src/hotspot/share/compiler/compileBroker.hpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/share/compiler/compileBroker.hpp	Tue Jun 12 14:25:13 2018 +0200
@@ -219,6 +219,8 @@
   static int _total_native_compile_count;
   static int _total_osr_compile_count;
   static int _total_standard_compile_count;
+  static int _total_compiler_stopped_count;
+  static int _total_compiler_restarted_count;
   static int _sum_osr_bytes_compiled;
   static int _sum_standard_bytes_compiled;
   static int _sum_nmethod_size;
@@ -338,7 +340,15 @@
   static bool set_should_compile_new_jobs(jint new_state) {
     // Return success if the current caller set it
     jint old = Atomic::cmpxchg(new_state, &_should_compile_new_jobs, 1-new_state);
-    return (old == (1-new_state));
+    bool success = (old == (1-new_state));
+    if (success) {
+      if (new_state == run_compilation) {
+        _total_compiler_restarted_count++;
+      } else {
+        _total_compiler_stopped_count++;
+      }
+    }
+    return success;
   }
 
   static void disable_compilation_forever() {
@@ -393,18 +403,20 @@
 
   static CompileLog* get_log(CompilerThread* ct);
 
-  static int get_total_compile_count() {          return _total_compile_count; }
-  static int get_total_bailout_count() {          return _total_bailout_count; }
-  static int get_total_invalidated_count() {      return _total_invalidated_count; }
-  static int get_total_native_compile_count() {   return _total_native_compile_count; }
-  static int get_total_osr_compile_count() {      return _total_osr_compile_count; }
-  static int get_total_standard_compile_count() { return _total_standard_compile_count; }
-  static int get_sum_osr_bytes_compiled() {       return _sum_osr_bytes_compiled; }
-  static int get_sum_standard_bytes_compiled() {  return _sum_standard_bytes_compiled; }
-  static int get_sum_nmethod_size() {             return _sum_nmethod_size;}
-  static int get_sum_nmethod_code_size() {        return _sum_nmethod_code_size; }
-  static long get_peak_compilation_time() {       return _peak_compilation_time; }
-  static long get_total_compilation_time() {      return _t_total_compilation.milliseconds(); }
+  static int get_total_compile_count() {            return _total_compile_count; }
+  static int get_total_bailout_count() {            return _total_bailout_count; }
+  static int get_total_invalidated_count() {        return _total_invalidated_count; }
+  static int get_total_native_compile_count() {     return _total_native_compile_count; }
+  static int get_total_osr_compile_count() {        return _total_osr_compile_count; }
+  static int get_total_standard_compile_count() {   return _total_standard_compile_count; }
+  static int get_total_compiler_stopped_count() {   return _total_compiler_stopped_count; }
+  static int get_total_compiler_restarted_count() { return _total_compiler_restarted_count; }
+  static int get_sum_osr_bytes_compiled() {         return _sum_osr_bytes_compiled; }
+  static int get_sum_standard_bytes_compiled() {    return _sum_standard_bytes_compiled; }
+  static int get_sum_nmethod_size() {               return _sum_nmethod_size;}
+  static int get_sum_nmethod_code_size() {          return _sum_nmethod_code_size; }
+  static long get_peak_compilation_time() {         return _peak_compilation_time; }
+  static long get_total_compilation_time() {        return _t_total_compilation.milliseconds(); }
 
   // Log that compilation profiling is skipped because metaspace is full.
   static void log_metaspace_failure();
--- a/src/hotspot/share/utilities/exceptions.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/share/utilities/exceptions.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -37,6 +37,7 @@
 #include "runtime/os.hpp"
 #include "runtime/thread.inline.hpp"
 #include "runtime/threadCritical.hpp"
+#include "runtime/atomic.hpp"
 #include "utilities/events.hpp"
 #include "utilities/exceptions.hpp"
 
@@ -151,6 +152,10 @@
     count_out_of_memory_exceptions(h_exception);
   }
 
+  if (h_exception->is_a(SystemDictionary::LinkageError_klass())) {
+    Atomic::inc(&_linkage_errors);
+  }
+
   assert(h_exception->is_a(SystemDictionary::Throwable_klass()), "exception is not a subclass of java/lang/Throwable");
 
   // set the pending exception
@@ -425,6 +430,7 @@
 
 // Exception counting for hs_err file
 volatile int Exceptions::_stack_overflow_errors = 0;
+volatile int Exceptions::_linkage_errors = 0;
 volatile int Exceptions::_out_of_memory_error_java_heap_errors = 0;
 volatile int Exceptions::_out_of_memory_error_metaspace_errors = 0;
 volatile int Exceptions::_out_of_memory_error_class_metaspace_errors = 0;
@@ -458,6 +464,9 @@
   if (_stack_overflow_errors > 0) {
     st->print_cr("StackOverflowErrors=%d", _stack_overflow_errors);
   }
+  if (_linkage_errors > 0) {
+    st->print_cr("LinkageErrors=%d", _linkage_errors);
+  }
 }
 
 // Implementation of ExceptionMark
--- a/src/hotspot/share/utilities/exceptions.hpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/hotspot/share/utilities/exceptions.hpp	Tue Jun 12 14:25:13 2018 +0200
@@ -108,6 +108,9 @@
   static volatile int _out_of_memory_error_java_heap_errors;
   static volatile int _out_of_memory_error_metaspace_errors;
   static volatile int _out_of_memory_error_class_metaspace_errors;
+
+  // Count linkage errors
+  static volatile int _linkage_errors;
  public:
   // this enum is defined to indicate whether it is safe to
   // ignore the encoding scheme of the original message string.
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Tue Jun 12 14:25:13 2018 +0200
@@ -2562,7 +2562,9 @@
                     Type argType = arityMismatch ?
                             syms.errType :
                             actuals.head;
-                    setSyntheticVariableType(params.head, argType);
+                    if (params.head.isImplicitlyTyped()) {
+                        setSyntheticVariableType(params.head, argType);
+                    }
                     params.head.sym = null;
                     actuals = actuals.isEmpty() ?
                             actuals :
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Tue Jun 12 14:25:13 2018 +0200
@@ -1702,6 +1702,7 @@
             }
             for (JCVariableDecl param: params) {
                 if (param.vartype != null && isRestrictedLocalVarTypeName(param.vartype)) {
+                    param.startPos = TreeInfo.getStartPos(param.vartype);
                     param.vartype = null;
                 }
             }
--- a/src/jdk.pack/share/native/common-unpack/unpack.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/jdk.pack/share/native/common-unpack/unpack.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -1799,6 +1799,7 @@
     case 'B': case 'H': case 'I': case 'V': // unsigned_int
     case 'S': // signed_int
       --lp; // reparse
+      /* fall through */
     case 'F':
       lp = parseIntLayout(lp, b, EK_INT);
       break;
--- a/src/jdk.pack/share/native/common-unpack/zip.cpp	Tue Jun 12 10:01:23 2018 +0200
+++ b/src/jdk.pack/share/native/common-unpack/zip.cpp	Tue Jun 12 14:25:13 2018 +0200
@@ -533,6 +533,8 @@
   char* bufptr = (char*) buf;
   char* inbuf = u->gzin->inbuf;
   size_t inbuflen = sizeof(u->gzin->inbuf);
+  // capture return values from fread to avoid -Werror=unused-result issues
+  size_t ret = 0;
   unpacker::read_input_fn_t read_gzin_fn =
     (unpacker::read_input_fn_t) u->gzin->read_input_fn;
   z_stream& zs = *(z_stream*) u->gzin->zstream;
@@ -579,8 +581,8 @@
         fseek(u->infileptr, -TRAILER_LEN, SEEK_END);
         uint filecrc;
         uint filelen;
-        fread(&filecrc, sizeof(filecrc), 1, u->infileptr);
-        fread(&filelen, sizeof(filelen), 1, u->infileptr);
+        ret = fread(&filecrc, sizeof(filecrc), 1, u->infileptr);
+        ret = fread(&filelen, sizeof(filelen), 1, u->infileptr);
         filecrc = SWAP_INT(filecrc);
         filelen = SWAP_INT(filelen);
         if (u->gzin->gzcrc != filecrc ||
--- a/test/langtools/tools/javac/tree/VarTree.java	Tue Jun 12 10:01:23 2018 +0200
+++ b/test/langtools/tools/javac/tree/VarTree.java	Tue Jun 12 14:25:13 2018 +0200
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8188225
+ * @bug 8188225 8204674
  * @summary Check that variables of type var have a consistent model
  * @modules jdk.compiler/com.sun.tools.javac.api
  */
@@ -42,6 +42,7 @@
 import javax.tools.ToolProvider;
 
 import com.sun.source.tree.VariableTree;
+import com.sun.source.util.JavacTask;
 import com.sun.source.util.TreeScanner;
 import com.sun.source.util.Trees;
 
@@ -64,6 +65,10 @@
                  "java.lang.String testVar");
         test.run("java.util.function.Consumer<String> c = (|testVar|) -> {};",
                  "java.lang.String testVar");
+        test.run("java.util.function.Consumer<String> c = (|var testVar|) -> {};",
+                 "java.lang.String testVar");
+        test.run("java.util.function.IntBinaryOperator c = (var x, |testType|) -> 1;",
+                 "testType ");
     }
 
     void run(String code, String expected) throws IOException {
@@ -81,9 +86,12 @@
                                                         null, Arrays.asList(new MyFileObject(src)));
 
         Iterable<? extends CompilationUnitTree> units = ct.parse();
+
+        runSpanCheck(ct, units, src, prefix.length() + parts[0].length(), prefix.length() + parts[0].length() + parts[1].length());
+
         ct.analyze();
 
-        Trees trees = Trees.instance(ct);
+        runSpanCheck(ct, units, src, prefix.length() + parts[0].length(), prefix.length() + parts[0].length() + parts[1].length());
 
         for (CompilationUnitTree cut : units) {
             new TreeScanner<Void, Void>() {
@@ -93,13 +101,34 @@
                         if (!expected.equals(node.toString())) {
                             throw new AssertionError("Unexpected tree: " + node.toString());
                         }
+                    }
+                    if (String.valueOf(node.getType()).equals("testType")) {
+                        if (!expected.equals(node.toString())) {
+                            throw new AssertionError("Unexpected tree: " + node.toString());
+                        }
+                    }
+                    return super.visitVariable(node, p);
+                }
 
+            }.scan(cut, null);
+        }
+    }
+
+    private void runSpanCheck(JavacTask ct, Iterable<? extends CompilationUnitTree> units, String src, int spanStart, int spanEnd) {
+        Trees trees = Trees.instance(ct);
+        boolean[] found = new boolean[1];
+
+        for (CompilationUnitTree cut : units) {
+            new TreeScanner<Void, Void>() {
+                @Override
+                public Void visitVariable(VariableTree node, Void p) {
+                    if (node.getName().contentEquals("testVar")) {
                         int start = (int) trees.getSourcePositions().getStartPosition(cut, node);
                         int end   = (int) trees.getSourcePositions().getEndPosition(cut, node);
 
                         String snip = src.substring(start, end);
 
-                        if (start != prefix.length() + parts[0].length() || end != prefix.length() + parts[0].length() + parts[1].length()) {
+                        if (start != spanStart || end != spanEnd) {
                             throw new AssertionError("Unexpected span: " + snip);
                         }
 
@@ -109,13 +138,32 @@
                         if (typeStart != (-1) && typeEnd != (-1)) {
                             throw new AssertionError("Unexpected type position: " + typeStart + ", " + typeEnd);
                         }
+
+                        found[0] = true;
+                    }
+                    if (String.valueOf(node.getType()).equals("testType")) {
+                        int start = (int) trees.getSourcePositions().getStartPosition(cut, node);
+                        int end   = (int) trees.getSourcePositions().getEndPosition(cut, node);
+
+                        String snip = src.substring(start, end);
+
+                        if (start != spanStart || end != spanEnd) {
+                            throw new AssertionError("Unexpected span: " + snip);
+                        }
+
+                        found[0] = true;
                     }
                     return super.visitVariable(node, p);
                 }
 
             }.scan(cut, null);
         }
+
+        if (!found[0]) {
+            throw new AssertionError("Didn't find the test variable.");
+        }
     }
+
     class MyFileObject extends SimpleJavaFileObject {
 
         private String text;