# HG changeset patch # User goetz # Date 1531405888 -7200 # Node ID fc6cfe40e32aa51eaf8d3db1fd5793e6f79b99cf # Parent 9baa91bc75676aa987796b7fec1177f94d758b44 8207049: Minor improvements of compiler code. Reviewed-by: kvn, mdoerr diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/cpu/x86/x86.ad --- a/src/hotspot/cpu/x86/x86.ad Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/cpu/x86/x86.ad Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ // -// Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2011, 2018, 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 @@ -1444,6 +1444,7 @@ case Op_CMoveVF: if (vlen != 8) ret_value = false; + break; case Op_CMoveVD: if (vlen != 4) ret_value = false; diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/archDesc.cpp --- a/src/hotspot/share/adlc/archDesc.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/archDesc.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ // -// Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1997, 2018, 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 @@ -543,14 +543,18 @@ } // Identify index position among ideal operands - intptr_t index = _last_opcode; - const char *indexStr = node ? node->_opType : (char *) " "; - index = (intptr_t)_idealIndex[indexStr]; + intptr_t index = _last_opcode; + const char *indexStr = node ? node->_opType : (char *) " "; + index = (intptr_t)_idealIndex[indexStr]; if (index == 0) { fprintf(stderr, "error: operand \"%s\" not found\n", indexStr); assert(0, "fatal error"); } + if (node == NULL) { + fprintf(stderr, "error: node is NULL\n"); + assert(0, "fatal error"); + } // Build MatchLists for children // Check each child for an internal operand name, and use that name // for the parent's matchlist entry if it exists diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/arena.cpp --- a/src/hotspot/share/adlc/arena.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/arena.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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,7 +43,7 @@ while( k ) { Chunk *tmp = k->_next; // clear out this chunk (to detect allocation bugs) - memset(k, 0xBAADBABE, k->_len); + memset(k, 0xBE, k->_len); free(k); // Free chunk (was malloc'd) k = tmp; } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/dfa.cpp --- a/src/hotspot/share/adlc/dfa.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/dfa.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -502,9 +502,11 @@ case '"': // such as: #line 10 "myfile.ad"\n mypredicate return true; case '|': - if( prev != pred && *(prev-1) == '|' ) return true; + if (prev != pred && *(prev-1) == '|') return true; + break; case '&': - if( prev != pred && *(prev-1) == '&' ) return true; + if (prev != pred && *(prev-1) == '&') return true; + break; default: return false; } @@ -717,21 +719,21 @@ // Preserve use of external name which has a zero value if( c1->_external_name != NULL ) { - sprintf( string_buffer, "%s", c1->as_string()); + sprintf(string_buffer, "%s", c1->as_string()); if( !c2->is_zero() ) { - strcat( string_buffer, "+"); - strcat( string_buffer, c2->as_string()); + strncat(string_buffer, "+", STRING_BUFFER_LENGTH); + strncat(string_buffer, c2->as_string(), STRING_BUFFER_LENGTH); } result = strdup(string_buffer); } else if( c2->_external_name != NULL ) { if( !c1->is_zero() ) { - sprintf( string_buffer, "%s", c1->as_string()); - strcat( string_buffer, " + "); + sprintf(string_buffer, "%s", c1->as_string()); + strncat(string_buffer, " + ", STRING_BUFFER_LENGTH); } else { string_buffer[0] = '\0'; } - strcat( string_buffer, c2->_external_name ); + strncat(string_buffer, c2->_external_name, STRING_BUFFER_LENGTH); result = strdup(string_buffer); } return result; @@ -741,8 +743,8 @@ if( !c1->is_zero() ) { sprintf( string_buffer, "%s", c1->_expr); if( !c2->is_zero() ) { - strcat( string_buffer, "+"); - strcat( string_buffer, c2->_expr); + strncat(string_buffer, "+", STRING_BUFFER_LENGTH); + strncat(string_buffer, c2->_expr, STRING_BUFFER_LENGTH); } } else if( !c2->is_zero() ) { diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/filebuff.cpp --- a/src/hotspot/share/adlc/filebuff.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/filebuff.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -95,8 +95,11 @@ va_start(args, fmt); switch (flag) { case 0: _AD._warnings += _AD.emit_msg(0, flag, linenum, fmt, args); + break; case 1: _AD._syntax_errs += _AD.emit_msg(0, flag, linenum, fmt, args); + break; case 2: _AD._semantic_errs += _AD.emit_msg(0, flag, linenum, fmt, args); + break; default: assert(0, ""); break; } va_end(args); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/formssel.cpp --- a/src/hotspot/share/adlc/formssel.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/formssel.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -3634,7 +3634,7 @@ && (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory) && (name_left != NULL) // NOT (load) && (name_right == NULL) ) { // NOT (load memory foo) - const Form *form2_left = name_left ? globals[name_left] : NULL; + const Form *form2_left = globals[name_left]; if( form2_left && form2_left->is_cisc_mem(globals) ) { cisc_spillable = Is_cisc_spillable; operand = _name; @@ -3645,7 +3645,7 @@ } } // Detect reg vs memory - else if( form->is_cisc_reg(globals) && form2->is_cisc_mem(globals) ) { + else if (form->is_cisc_reg(globals) && form2 != NULL && form2->is_cisc_mem(globals)) { cisc_spillable = Is_cisc_spillable; operand = _name; reg_type = _result; @@ -3710,8 +3710,12 @@ } // Check right operands: recursive walk to identify reg->mem operand - if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) { - right_spillable = Maybe_cisc_spillable; + if (_rChild == NULL) { + if (mRule2->_rChild == NULL) { + right_spillable = Maybe_cisc_spillable; + } else { + assert(0, "_rChild should not be NULL"); + } } else { right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type); } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/main.cpp --- a/src/hotspot/share/adlc/main.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/main.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -142,7 +142,7 @@ const char *base = strip_ext(strdup(argv[i])); char *temp = base_plus_suffix("dfa_",base); AD._DFA_file._name = base_plus_suffix(temp,".cpp"); - delete temp; + delete[] temp; temp = base_plus_suffix("ad_",base); AD._CPP_file._name = base_plus_suffix(temp,".cpp"); AD._CPP_CLONE_file._name = base_plus_suffix(temp,"_clone.cpp"); @@ -153,13 +153,13 @@ AD._CPP_PEEPHOLE_file._name = base_plus_suffix(temp,"_peephole.cpp"); AD._CPP_PIPELINE_file._name = base_plus_suffix(temp,"_pipeline.cpp"); AD._HPP_file._name = base_plus_suffix(temp,".hpp"); - delete temp; + delete[] temp; temp = base_plus_suffix("adGlobals_",base); AD._VM_file._name = base_plus_suffix(temp,".hpp"); - delete temp; + delete[] temp; temp = base_plus_suffix("bugs_",base); AD._bug_file._name = base_plus_suffix(temp,".out"); - delete temp; + delete[] temp; } // End of files vs options... } // End of while have command line arguments diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/adlc/output_c.cpp --- a/src/hotspot/share/adlc/output_c.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/adlc/output_c.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -1936,6 +1936,7 @@ _AD.syntax_err( _ins_encode._linenum, "Parameter %s not passed to enc_class %s from instruct %s.\n", rep_var, _encoding._name, _inst._ident); + assert(false, "inst_rep_var == NULL, cannot continue."); } // Check if instruction's actual parameter is a local name in the instruction @@ -1976,8 +1977,8 @@ } else { // Check for unimplemented functionality before hard failure - assert( strcmp(opc->_ident,"label")==0, "Unimplemented() Label"); - assert( false, "ShouldNotReachHere()"); + assert(opc != NULL && strcmp(opc->_ident, "label") == 0, "Unimplemented Label"); + assert(false, "ShouldNotReachHere()"); } } // done checking which operand this is. } else { @@ -2450,8 +2451,8 @@ } else { // Check for unimplemented functionality before hard failure - assert( strcmp(opc->_ident,"label")==0, "Unimplemented() Label"); - assert( false, "ShouldNotReachHere()"); + assert(opc != NULL && strcmp(opc->_ident, "label") == 0, "Unimplemented Label"); + assert(false, "ShouldNotReachHere()"); } // all done } @@ -3305,9 +3306,11 @@ // Output the definitions for machine node specific pipeline data _machnodes.reset(); - for ( ; (machnode = (MachNodeForm*)_machnodes.iter()) != NULL; ) { - fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %sNode::pipeline() const { return (&pipeline_class_%03d); }\n", - machnode->_ident, ((class PipeClassForm *)_pipeline->_classdict[machnode->_machnode_pipe])->_num); + if (_pipeline != NULL) { + for ( ; (machnode = (MachNodeForm*)_machnodes.iter()) != NULL; ) { + fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %sNode::pipeline() const { return (&pipeline_class_%03d); }\n", + machnode->_ident, ((class PipeClassForm *)_pipeline->_classdict[machnode->_machnode_pipe])->_num); + } } fprintf(_CPP_PIPELINE_file._fp, "\n"); @@ -3315,13 +3318,15 @@ // Output the definitions for instruction pipeline static data references _instructions.reset(); - for ( ; (instr = (InstructForm*)_instructions.iter()) != NULL; ) { - if (instr->_ins_pipe && _pipeline->_classlist.search(instr->_ins_pipe)) { - fprintf(_CPP_PIPELINE_file._fp, "\n"); - fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %*sNode::pipeline_class() { return (&pipeline_class_%03d); }\n", - max_ident_len, instr->_ident, ((class PipeClassForm *)_pipeline->_classdict[instr->_ins_pipe])->_num); - fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %*sNode::pipeline() const { return (&pipeline_class_%03d); }\n", - max_ident_len, instr->_ident, ((class PipeClassForm *)_pipeline->_classdict[instr->_ins_pipe])->_num); + if (_pipeline != NULL) { + for ( ; (instr = (InstructForm*)_instructions.iter()) != NULL; ) { + if (instr->_ins_pipe && _pipeline->_classlist.search(instr->_ins_pipe)) { + fprintf(_CPP_PIPELINE_file._fp, "\n"); + fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %*sNode::pipeline_class() { return (&pipeline_class_%03d); }\n", + max_ident_len, instr->_ident, ((class PipeClassForm *)_pipeline->_classdict[instr->_ins_pipe])->_num); + fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %*sNode::pipeline() const { return (&pipeline_class_%03d); }\n", + max_ident_len, instr->_ident, ((class PipeClassForm *)_pipeline->_classdict[instr->_ins_pipe])->_num); + } } } } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/asm/codeBuffer.cpp --- a/src/hotspot/share/asm/codeBuffer.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/asm/codeBuffer.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -187,7 +187,7 @@ cs->_limit = new_limit; cs->_locs_limit = new_locs_limit; cs->_frozen = true; - if (!next_cs->is_allocated() && !next_cs->is_frozen()) { + if (next_cs != NULL && !next_cs->is_allocated() && !next_cs->is_frozen()) { // Give remaining buffer space to the following section. next_cs->initialize(new_limit, old_limit - new_limit); next_cs->initialize_shared_locs(new_locs_limit, @@ -494,10 +494,13 @@ // Compute initial padding; assign it to the previous non-empty guy. // Cf. figure_expanded_capacities. csize_t padding = cs->align_at_start(buf_offset) - buf_offset; - if (padding != 0) { - buf_offset += padding; - assert(prev_dest_cs != NULL, "sanity"); - prev_dest_cs->_limit += padding; + if (prev_dest_cs != NULL) { + if (padding != 0) { + buf_offset += padding; + prev_dest_cs->_limit += padding; + } + } else { + guarantee(padding == 0, "In first iteration no padding should be needed."); } #ifdef ASSERT if (prev_cs != NULL && prev_cs->is_frozen() && n < (SECT_LIMIT - 1)) { diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/c1/c1_IR.cpp --- a/src/hotspot/share/c1/c1_IR.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/c1/c1_IR.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -1386,7 +1386,7 @@ n->values_do(this); // need to remove this instruction from the instruction stream if (n->subst() != n) { - assert(last != NULL, "must have last"); + guarantee(last != NULL, "must have last"); last->set_next(n->next()); } else { last = n; diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/c1/c1_LinearScan.cpp --- a/src/hotspot/share/c1/c1_LinearScan.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/c1/c1_LinearScan.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2018, 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 @@ -3954,7 +3954,7 @@ if (!processed_interval) { // no move could be processed because there is a cycle in the move list // (e.g. r1 -> r2, r2 -> r1), so one interval must be spilled to memory - assert(spill_candidate != -1, "no interval in register for spilling found"); + guarantee(spill_candidate != -1, "no interval in register for spilling found"); // create a new spill interval and assign a stack slot to it Interval* from_interval = _mapping_from.at(spill_candidate); @@ -6301,7 +6301,8 @@ assert(prev_branch->cond() == prev_cmp->condition(), "should be the same"); } } - assert(prev_cmp != NULL, "should have found comp instruction for branch"); + // Guarantee because it is dereferenced below. + guarantee(prev_cmp != NULL, "should have found comp instruction for branch"); if (prev_branch->block() == code->at(i + 1) && prev_branch->info() == NULL) { TRACE_LINEAR_SCAN(3, tty->print_cr("Negating conditional branch and deleting unconditional branch at end of block B%d", block->block_id())); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/code/codeCache.cpp --- a/src/hotspot/share/code/codeCache.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/code/codeCache.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1363,22 +1363,22 @@ const char *msg1 = msg1_stream.as_string(); const char *msg2 = msg2_stream.as_string(); - log_warning(codecache)(msg1); - log_warning(codecache)(msg2); - warning(msg1); - warning(msg2); + log_warning(codecache)("%s", msg1); + log_warning(codecache)("%s", msg2); + warning("%s", msg1); + warning("%s", msg2); } else { const char *msg1 = "CodeCache is full. Compiler has been disabled."; const char *msg2 = "Try increasing the code cache size using -XX:ReservedCodeCacheSize="; - log_warning(codecache)(msg1); - log_warning(codecache)(msg2); - warning(msg1); - warning(msg2); + log_warning(codecache)("%s", msg1); + log_warning(codecache)("%s", msg2); + warning("%s", msg1); + warning("%s", msg2); } ResourceMark rm; stringStream s; - // Dump code cache into a buffer before locking the tty, + // Dump code cache into a buffer before locking the tty. { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); print_summary(&s); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/compiler/compileLog.cpp --- a/src/hotspot/share/compiler/compileLog.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/compiler/compileLog.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2018, 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 @@ -217,14 +217,17 @@ file->print_raw_cr("'>"); size_t nr; // number read into buf from partial log + // In case of unsuccessful completion, read returns -1. + ssize_t bytes_read; // Copy data up to the end of the last element: julong to_read = log->_file_end; while (to_read > 0) { if (to_read < (julong)buflen) nr = (size_t)to_read; else nr = buflen; - nr = read(partial_fd, buf, (int)nr); - if (nr <= 0) break; + bytes_read = read(partial_fd, buf, (int)nr); + if (bytes_read <= 0) break; + nr = bytes_read; to_read -= (julong)nr; file->write(buf, nr); } @@ -232,7 +235,8 @@ // Copy any remaining data inside a quote: bool saw_slop = false; int end_cdata = 0; // state machine [0..2] watching for too many "]]" - while ((nr = read(partial_fd, buf, buflen-1)) > 0) { + while ((bytes_read = read(partial_fd, buf, buflen-1)) > 0) { + nr = bytes_read; buf[buflen-1] = '\0'; if (!saw_slop) { file->print_raw_cr(""); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/compiler/disassembler.cpp --- a/src/hotspot/share/compiler/disassembler.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/compiler/disassembler.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -122,7 +122,7 @@ _decode_instructions_virtual = CAST_TO_FN_PTR(Disassembler::decode_func_virtual, os::dll_lookup(_library, decode_instructions_virtual_name)); } - if (_decode_instructions_virtual == NULL) { + if (_decode_instructions_virtual == NULL && _library != NULL) { // could not spot in new version, try old version _decode_instructions = CAST_TO_FN_PTR(Disassembler::decode_func, os::dll_lookup(_library, decode_instructions_name)); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/compiler/methodLiveness.cpp --- a/src/hotspot/share/compiler/methodLiveness.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/compiler/methodLiveness.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -484,7 +484,7 @@ while (block == NULL && t > 0) { block = _block_map->at(--t); } - assert( block != NULL, "invalid bytecode index; must be instruction index" ); + guarantee(block != NULL, "invalid bytecode index; must be instruction index"); assert(bci >= block->start_bci() && bci < block->limit_bci(), "block must contain bci."); answer = block->get_liveness_at(method(), bci); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/compiler/oopMap.cpp --- a/src/hotspot/share/compiler/oopMap.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/compiler/oopMap.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -571,14 +571,14 @@ const ImmutableOopMap* ImmutableOopMapSet::find_map_at_offset(int pc_offset) const { ImmutableOopMapPair* pairs = get_pairs(); - ImmutableOopMapPair* last = NULL; - for (int i = 0; i < _count; ++i) { + int i; + for (i = 0; i < _count; ++i) { if (pairs[i].pc_offset() >= pc_offset) { - last = &pairs[i]; break; } } + ImmutableOopMapPair* last = &pairs[i]; assert(last->pc_offset() == pc_offset, "oopmap not found"); return last->get_from(this); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/jvmci/jvmciCodeInstaller.cpp --- a/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -236,6 +236,8 @@ JVMCIKlassHandle klass(THREAD); oop result = NULL; + guarantee(h != NULL, + "If DebugInformationRecorder::describe_scope passes NULL oldCount == newCount must hold."); if (h->is_klass()) { klass = (Klass*) h; result = CompilerToVM::get_jvmci_type(klass, CATCH); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/jvmci/jvmciCompilerToVM.cpp --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -349,7 +349,9 @@ klass = *((Klass**) (intptr_t) (base_address + offset)); } else { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), - err_msg("Unexpected arguments: %s " JLONG_FORMAT " %s", base_object->klass()->external_name(), offset, compressed ? "true" : "false")); + err_msg("Unexpected arguments: %s " JLONG_FORMAT " %s", + base_object != NULL ? base_object->klass()->external_name() : "null", + offset, compressed ? "true" : "false")); } assert (klass == NULL || klass->is_klass(), "invalid read"); oop result = CompilerToVM::get_jvmci_type(klass, CHECK_NULL); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/arraycopynode.cpp --- a/src/hotspot/share/opto/arraycopynode.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/arraycopynode.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -659,7 +659,8 @@ c = bs->step_over_gc_barrier(c); CallNode* call = NULL; - if (c != NULL && c->is_Region()) { + guarantee(c != NULL, "step_over_gc_barrier failed, there must be something to step to."); + if (c->is_Region()) { for (uint i = 1; i < c->req(); i++) { if (c->in(i) != NULL) { Node* n = c->in(i)->in(0); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/bytecodeInfo.cpp --- a/src/hotspot/share/opto/bytecodeInfo.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/bytecodeInfo.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -520,10 +520,10 @@ caller_bci, inline_msg); if (C->print_inlining()) { C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg); - if (callee_method == NULL) tty->print(" callee not monotonic or profiled"); - if (Verbose && callee_method) { + guarantee(callee_method != NULL, "would crash in post_inlining_event"); + if (Verbose) { const InlineTree *top = this; - while( top->caller_tree() != NULL ) { top = top->caller_tree(); } + while (top->caller_tree() != NULL) { top = top->caller_tree(); } //tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count()); } } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/callnode.cpp --- a/src/hotspot/share/opto/callnode.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/callnode.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -759,6 +759,7 @@ } } } + guarantee(dest != NULL, "Call had only one ptr in, broken IR!"); if (!dest->is_top() && may_modify_arraycopy_helper(phase->type(dest)->is_oopptr(), t_oop, phase)) { return true; } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/compile.cpp --- a/src/hotspot/share/opto/compile.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/compile.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -4049,9 +4049,9 @@ int Compile::ConstantTable::find_offset(Constant& con) const { int idx = _constants.find(con); - assert(idx != -1, "constant must be in constant table"); + guarantee(idx != -1, "constant must be in constant table"); int offset = _constants.at(idx).offset(); - assert(offset != -1, "constant table not emitted yet?"); + guarantee(offset != -1, "constant table not emitted yet?"); return offset; } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/gcm.cpp --- a/src/hotspot/share/opto/gcm.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/gcm.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1263,6 +1263,7 @@ Node* use = self->fast_out(i); LCA = raise_LCA_above_use(LCA, use, self, this); } + guarantee(LCA != NULL, "There must be a LCA"); } // (Hide defs of imax, i from rest of block.) // Place temps in the block of their use. This isn't a diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/ifnode.cpp --- a/src/hotspot/share/opto/ifnode.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/ifnode.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -387,6 +387,7 @@ } else { assert( 0, "do not know how to handle this guy" ); } + guarantee(proj != NULL, "sanity"); Node *proj_path_data, *proj_path_ctrl; if( proj->Opcode() == Op_IfTrue ) { diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/indexSet.cpp --- a/src/hotspot/share/opto/indexSet.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/indexSet.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -319,7 +319,7 @@ if (_max_blocks <= preallocated_block_list_size) { _blocks = _preallocated_block_list; } else { - _blocks = (IndexSet::BitBlock**) arena()->Amalloc_4(sizeof(IndexSet::BitBlock**) * _max_blocks); + _blocks = (IndexSet::BitBlock**) arena()->Amalloc_4(sizeof(IndexSet::BitBlock*) * _max_blocks); } for (uint i = 0; i < _max_blocks; i++) { set_block(i, &_empty_block); @@ -343,7 +343,7 @@ if (_max_blocks <= preallocated_block_list_size) { _blocks = _preallocated_block_list; } else { - _blocks = (IndexSet::BitBlock**) arena->Amalloc_4(sizeof(IndexSet::BitBlock**) * _max_blocks); + _blocks = (IndexSet::BitBlock**) arena->Amalloc_4(sizeof(IndexSet::BitBlock*) * _max_blocks); } for (uint i = 0; i < _max_blocks; i++) { set_block(i, &_empty_block); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/lcm.cpp --- a/src/hotspot/share/opto/lcm.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/lcm.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -646,7 +646,7 @@ } } // End of for all ready nodes in worklist - assert(idx >= 0, "index should be set"); + guarantee(idx >= 0, "index should be set"); Node *n = worklist[(uint)idx]; // Get the winner worklist.map((uint)idx, worklist.pop()); // Compress worklist diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/loopPredicate.cpp --- a/src/hotspot/share/opto/loopPredicate.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/loopPredicate.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, 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 @@ -684,6 +684,7 @@ Node* max_idx_expr = NULL; const TypeInt* idx_type = TypeInt::INT; if ((stride > 0) == (scale > 0) == upper) { + guarantee(limit != NULL, "sanity"); if (TraceLoopPredicate) { if (limit->is_Con()) { predString->print("(%d ", con_limit); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/loopTransform.cpp --- a/src/hotspot/share/opto/loopTransform.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/loopTransform.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -768,11 +768,12 @@ Node *init_n = cl->init_trip(); Node *limit_n = cl->limit(); int stride_con = cl->stride_con(); + if (limit_n == NULL) return false; // We will dereference it below. + // Non-constant bounds. // Protect against over-unrolling when init or/and limit are not constant // (so that trip_count's init value is maxint) but iv range is known. - if (init_n == NULL || !init_n->is_Con() || - limit_n == NULL || !limit_n->is_Con()) { + if (init_n == NULL || !init_n->is_Con() || !limit_n->is_Con()) { Node* phi = cl->phi(); if (phi != NULL) { assert(phi->is_Phi() && phi->in(0) == _head, "Counted loop should have iv phi."); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/macro.cpp --- a/src/hotspot/share/opto/macro.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/macro.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -2154,6 +2154,7 @@ Node* mem = alock->in(TypeFunc::Memory); Node* ctrl = alock->in(TypeFunc::Control); + guarantee(ctrl != NULL, "missing control projection, cannot replace_node() with NULL"); extract_call_projections(alock); // There are 2 projections from the lock. The lock node will @@ -2188,8 +2189,7 @@ } // Seach for MemBarReleaseLock node and delete it also. - if (alock->is_Unlock() && ctrl != NULL && ctrl->is_Proj() && - ctrl->in(0)->is_MemBar()) { + if (alock->is_Unlock() && ctrl->is_Proj() && ctrl->in(0)->is_MemBar()) { MemBarNode* membar = ctrl->in(0)->as_MemBar(); assert(membar->Opcode() == Op_MemBarReleaseLock && mem->is_Proj() && membar == mem->in(0), ""); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/memnode.cpp --- a/src/hotspot/share/opto/memnode.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/memnode.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -370,10 +370,10 @@ if (mem != old_mem) { set_req(MemNode::Memory, mem); - if (can_reshape && old_mem->outcnt() == 0) { - igvn->_worklist.push(old_mem); + if (can_reshape && old_mem->outcnt() == 0 && igvn != NULL) { + igvn->_worklist.push(old_mem); } - if (phase->type( mem ) == Type::TOP) return NodeSentinel; + if (phase->type(mem) == Type::TOP) return NodeSentinel; return this; } @@ -825,7 +825,7 @@ } break; default: - // ShouldNotReachHere(); ??? + ShouldNotReachHere(); break; } assert(load != NULL, "LoadNode should have been created"); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/node.hpp --- a/src/hotspot/share/opto/node.hpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/node.hpp Thu Jul 12 16:31:28 2018 +0200 @@ -1689,9 +1689,10 @@ int block_idx = (idx >> _log2_node_notes_block_size); int grow_by = (block_idx - (arr == NULL? 0: arr->length())); if (grow_by >= 0) { - if (!can_grow) return NULL; + if (!can_grow) return NULL; grow_node_notes(arr, grow_by + 1); } + if (arr == NULL) return NULL; // (Every element of arr is a sub-array of length _node_notes_block_size.) return arr->at(block_idx) + (idx & (_node_notes_block_size-1)); } diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/output.cpp --- a/src/hotspot/share/opto/output.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/output.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1424,7 +1424,7 @@ // See if this instruction has a delay slot if (valid_bundle_info(n) && node_bundling(n)->use_unconditional_delay()) { - assert(delay_slot != NULL, "expecting delay slot node"); + guarantee(delay_slot != NULL, "expecting delay slot node"); // Back up 1 instruction cb->set_insts_end(cb->insts_end() - Pipeline::instr_unit_size()); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/parse1.cpp --- a/src/hotspot/share/opto/parse1.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/parse1.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -1823,7 +1823,7 @@ // Instead, wire the new split into a MergeMem on the backedge. // The optimizer will sort it out, slicing the phi. if (remerge == NULL) { - assert(base != NULL, ""); + guarantee(base != NULL, ""); assert(base->in(0) != NULL, "should not be xformed away"); remerge = MergeMemNode::make(base->in(pnum)); gvn().set_type(remerge, Type::MEMORY); diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/reg_split.cpp --- a/src/hotspot/share/opto/reg_split.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/reg_split.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, 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 @@ -683,7 +683,7 @@ if( needs_phi ) { // create a new phi node and insert it into the block // type is taken from left over pointer to a predecessor - assert(n3,"No non-NULL reaching DEF for a Phi"); + guarantee(n3, "No non-NULL reaching DEF for a Phi"); phi = new PhiNode(b->head(), n3->bottom_type()); // initialize the Reaches entry for this LRG Reachblock[slidx] = phi; diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/runtime.cpp --- a/src/hotspot/share/opto/runtime.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/runtime.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1608,7 +1608,12 @@ } int bci = jvms->bci(); if (bci < 0) bci = 0; - st.print("%s.%s@%d", m->holder()->name()->as_utf8(), m->name()->as_utf8(), bci); + if (m != NULL) { + st.print("%s.%s", m->holder()->name()->as_utf8(), m->name()->as_utf8()); + } else { + st.print("no method"); + } + st.print("@%d", bci); // To print linenumbers instead of bci use: m->line_number_from_bci(bci) } NamedCounter* c; diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/opto/type.cpp --- a/src/hotspot/share/opto/type.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/opto/type.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -252,17 +252,16 @@ ciObject* oop_constant = constant.as_object(); if (oop_constant->is_null_object()) { con_type = Type::get_zero_type(T_OBJECT); - } else if (require_constant || oop_constant->should_be_constant()) { + } else { + guarantee(require_constant || oop_constant->should_be_constant(), "con_type must get computed"); con_type = TypeOopPtr::make_from_constant(oop_constant, require_constant); - if (con_type != NULL) { - if (Compile::current()->eliminate_boxing() && is_autobox_cache) { - con_type = con_type->is_aryptr()->cast_to_autobox_cache(true); - } - if (stable_dimension > 0) { - assert(FoldStableValues, "sanity"); - assert(!con_type->is_zero_type(), "default value for stable field"); - con_type = con_type->is_aryptr()->cast_to_stable(true, stable_dimension); - } + if (Compile::current()->eliminate_boxing() && is_autobox_cache) { + con_type = con_type->is_aryptr()->cast_to_autobox_cache(true); + } + if (stable_dimension > 0) { + assert(FoldStableValues, "sanity"); + assert(!con_type->is_zero_type(), "default value for stable field"); + con_type = con_type->is_aryptr()->cast_to_stable(true, stable_dimension); } } if (is_narrow_oop) { diff -r 9baa91bc7567 -r fc6cfe40e32a src/hotspot/share/runtime/simpleThresholdPolicy.cpp --- a/src/hotspot/share/runtime/simpleThresholdPolicy.cpp Fri Jul 13 11:21:55 2018 +0800 +++ b/src/hotspot/share/runtime/simpleThresholdPolicy.cpp Thu Jul 12 16:31:28 2018 +0200 @@ -266,8 +266,9 @@ max_method = max_task->method(); } - if (max_task->comp_level() == CompLevel_full_profile && TieredStopAtLevel > CompLevel_full_profile - && is_method_profiled(max_method)) { + if (max_task != NULL && max_task->comp_level() == CompLevel_full_profile && + TieredStopAtLevel > CompLevel_full_profile && + max_method != NULL && is_method_profiled(max_method)) { max_task->set_comp_level(CompLevel_limited_profile); if (PrintTieredEvents) { print_event(UPDATE_IN_QUEUE, max_method, max_method, max_task->osr_bci(), (CompLevel)max_task->comp_level());