8145707: 4 Null pointer dereference defect groups in compileBroker.cpp

Added explicit null checks to fix possible null pointer dereference errors for internal tests.

Reviewed-by: kvn
This commit is contained in:
Rahul Raghavan 2016-02-19 10:06:19 +01:00 committed by Tobias Hartmann
parent 0e441f9177
commit b239e217b9

View file

@ -2152,18 +2152,33 @@ void CompileBroker::collect_statistics(CompilerThread* thread, elapsedTimer time
if (CITime) { if (CITime) {
int bytes_compiled = method->code_size() + task->num_inlined_bytecodes(); int bytes_compiled = method->code_size() + task->num_inlined_bytecodes();
JVMCI_ONLY(CompilerStatistics* stats = compiler(task->comp_level())->stats();)
if (is_osr) { if (is_osr) {
_t_osr_compilation.add(time); _t_osr_compilation.add(time);
_sum_osr_bytes_compiled += bytes_compiled; _sum_osr_bytes_compiled += bytes_compiled;
JVMCI_ONLY(stats->_osr.update(time, bytes_compiled);)
} else { } else {
_t_standard_compilation.add(time); _t_standard_compilation.add(time);
_sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
JVMCI_ONLY(stats->_standard.update(time, bytes_compiled);)
} }
JVMCI_ONLY(stats->_nmethods_size += code->total_size();)
JVMCI_ONLY(stats->_nmethods_code_size += code->insts_size();) #if INCLUDE_JVMCI
AbstractCompiler* comp = compiler(task->comp_level());
if (comp) {
CompilerStatistics* stats = comp->stats();
if (stats) {
if (is_osr) {
stats->_osr.update(time, bytes_compiled);
} else {
stats->_standard.update(time, bytes_compiled);
}
stats->_nmethods_size += code->total_size();
stats->_nmethods_code_size += code->insts_size();
} else { // if (!stats)
assert(false, "Compiler statistics object must exist");
}
} else { // if (!comp)
assert(false, "Compiler object must exist");
}
#endif // INCLUDE_JVMCI
} }
if (UsePerfData) { if (UsePerfData) {
@ -2222,11 +2237,15 @@ const char* CompileBroker::compiler_name(int comp_level) {
#if INCLUDE_JVMCI #if INCLUDE_JVMCI
void CompileBroker::print_times(AbstractCompiler* comp) { void CompileBroker::print_times(AbstractCompiler* comp) {
CompilerStatistics* stats = comp->stats(); CompilerStatistics* stats = comp->stats();
if (stats) {
tty->print_cr(" %s {speed: %d bytes/s; standard: %6.3f s, %d bytes, %d methods; osr: %6.3f s, %d bytes, %d methods; nmethods_size: %d bytes; nmethods_code_size: %d bytes}", tty->print_cr(" %s {speed: %d bytes/s; standard: %6.3f s, %d bytes, %d methods; osr: %6.3f s, %d bytes, %d methods; nmethods_size: %d bytes; nmethods_code_size: %d bytes}",
comp->name(), stats->bytes_per_second(), comp->name(), stats->bytes_per_second(),
stats->_standard._time.seconds(), stats->_standard._bytes, stats->_standard._count, stats->_standard._time.seconds(), stats->_standard._bytes, stats->_standard._count,
stats->_osr._time.seconds(), stats->_osr._bytes, stats->_osr._count, stats->_osr._time.seconds(), stats->_osr._bytes, stats->_osr._count,
stats->_nmethods_size, stats->_nmethods_code_size); stats->_nmethods_size, stats->_nmethods_code_size);
} else { // if (!stats)
assert(false, "Compiler statistics object must exist");
}
comp->print_timers(); comp->print_timers();
} }
#endif // INCLUDE_JVMCI #endif // INCLUDE_JVMCI
@ -2260,6 +2279,7 @@ void CompileBroker::print_times(bool per_compiler, bool aggregate) {
} }
CompilerStatistics* stats = comp->stats(); CompilerStatistics* stats = comp->stats();
if (stats) {
standard_compilation.add(stats->_standard._time); standard_compilation.add(stats->_standard._time);
osr_compilation.add(stats->_osr._time); osr_compilation.add(stats->_osr._time);
@ -2271,6 +2291,9 @@ void CompileBroker::print_times(bool per_compiler, bool aggregate) {
nmethods_size += stats->_nmethods_size; nmethods_size += stats->_nmethods_size;
nmethods_code_size += stats->_nmethods_code_size; nmethods_code_size += stats->_nmethods_code_size;
} else { // if (!stats)
assert(false, "Compiler statistics object must exist");
}
if (per_compiler) { if (per_compiler) {
print_times(comp); print_times(comp);