# HG changeset patch # User never # Date 1316587816 25200 # Node ID eda6988c0d816db1fe9ad2639d8dd61d614564d3 # Parent 075ea0ed9e7c792f0ca2e55f45d3aadd0d8107d8 7092236: java/util/EnumSet/EnumSetBash.java fails Reviewed-by: kvn, twisti, jrose diff -r 075ea0ed9e7c -r eda6988c0d81 src/share/vm/ci/ciEnv.cpp --- a/src/share/vm/ci/ciEnv.cpp Tue Sep 20 08:39:40 2011 -0700 +++ b/src/share/vm/ci/ciEnv.cpp Tue Sep 20 23:50:16 2011 -0700 @@ -910,27 +910,37 @@ // dependencies were inserted. Any violated dependences in this // case are dumped to the tty. bool counter_changed = system_dictionary_modification_counter_changed(); - bool test_deps = counter_changed; - DEBUG_ONLY(test_deps = true); - if (!test_deps) return; - bool print_failures = false; - DEBUG_ONLY(print_failures = !counter_changed); - bool keep_going = (print_failures || xtty != NULL); + bool verify_deps = trueInDebug; + if (!counter_changed && !verify_deps) return; + int klass_violations = 0; - for (Dependencies::DepStream deps(dependencies()); deps.next(); ) { if (!deps.is_klass_type()) continue; // skip non-klass dependencies klassOop witness = deps.check_dependency(); if (witness != NULL) { klass_violations++; - if (print_failures) deps.print_dependency(witness, /*verbose=*/ true); + if (!counter_changed) { + // Dependence failed but counter didn't change. Log a message + // describing what failed and allow the assert at the end to + // trigger. + deps.print_dependency(witness); + } else if (xtty == NULL) { + // If we're not logging then a single violation is sufficient, + // otherwise we want to log all the dependences which were + // violated. + break; + } } - // If there's no log and we're not sanity-checking, we're done. - if (!keep_going) break; } if (klass_violations != 0) { +#ifdef ASSERT + if (!counter_changed && !PrintCompilation) { + // Print out the compile task that failed + _task->print_line(); + } +#endif assert(counter_changed, "failed dependencies, but counter didn't change"); record_failure("concurrent class loading"); }