changeset 7590:fd55c0f2c200

8067338: compiler/debug/TraceIterativeGVN.java segfaults Reviewed-by: kvn
author vlivanov
date Fri, 19 Dec 2014 16:42:40 -0800
parents ff29b5858de6
children fe5535ac094e
files src/share/vm/opto/callnode.cpp src/share/vm/opto/loopnode.cpp src/share/vm/opto/machnode.cpp src/share/vm/opto/memnode.cpp
diffstat 4 files changed, 16 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/opto/callnode.cpp	Tue Dec 16 20:09:29 2014 +0100
+++ b/src/share/vm/opto/callnode.cpp	Fri Dec 19 16:42:40 2014 -0800
@@ -658,7 +658,7 @@
 
 void CallNode::dump_spec(outputStream *st) const {
   st->print(" ");
-  tf()->dump_on(st);
+  if (tf() != NULL)  tf()->dump_on(st);
   if (_cnt != COUNT_UNKNOWN)  st->print(" C=%f",_cnt);
   if (jvms() != NULL)  jvms()->dump_spec(st);
 }
--- a/src/share/vm/opto/loopnode.cpp	Tue Dec 16 20:09:29 2014 +0100
+++ b/src/share/vm/opto/loopnode.cpp	Fri Dec 19 16:42:40 2014 -0800
@@ -1147,7 +1147,7 @@
 // Dump special per-node info
 #ifndef PRODUCT
 void CountedLoopEndNode::dump_spec(outputStream *st) const {
-  if( in(TestValue)->is_Bool() ) {
+  if( in(TestValue) != NULL && in(TestValue)->is_Bool() ) {
     BoolTest bt( test_trip()); // Added this for g++.
 
     st->print("[");
--- a/src/share/vm/opto/machnode.cpp	Tue Dec 16 20:09:29 2014 +0100
+++ b/src/share/vm/opto/machnode.cpp	Fri Dec 19 16:42:40 2014 -0800
@@ -473,8 +473,13 @@
 // Print any per-operand special info
 void MachNode::dump_spec(outputStream *st) const {
   uint cnt = num_opnds();
-  for( uint i=0; i<cnt; i++ )
-    _opnds[i]->dump_spec(st);
+  for( uint i=0; i<cnt; i++ ) {
+    if (_opnds[i] != NULL) {
+      _opnds[i]->dump_spec(st);
+    } else {
+      st->print(" _");
+    }
+  }
   const TypePtr *t = adr_type();
   if( t ) {
     Compile* C = Compile::current();
@@ -493,7 +498,11 @@
 //=============================================================================
 #ifndef PRODUCT
 void MachTypeNode::dump_spec(outputStream *st) const {
-  _bottom_type->dump_on(st);
+  if (_bottom_type != NULL) {
+    _bottom_type->dump_on(st);
+  } else {
+    st->print(" NULL");
+  }
 }
 #endif
 
@@ -635,7 +644,7 @@
 #ifndef PRODUCT
 void MachCallNode::dump_spec(outputStream *st) const {
   st->print("# ");
-  tf()->dump_on(st);
+  if (tf() != NULL)  tf()->dump_on(st);
   if (_cnt != COUNT_UNKNOWN)  st->print(" C=%f",_cnt);
   if (jvms() != NULL)  jvms()->dump_spec(st);
 }
--- a/src/share/vm/opto/memnode.cpp	Tue Dec 16 20:09:29 2014 +0100
+++ b/src/share/vm/opto/memnode.cpp	Fri Dec 19 16:42:40 2014 -0800
@@ -4370,7 +4370,7 @@
   st->print(" {");
   Node* base_mem = base_memory();
   for( uint i = Compile::AliasIdxRaw; i < req(); i++ ) {
-    Node* mem = memory_at(i);
+    Node* mem = (in(i) != NULL) ? memory_at(i) : base_mem;
     if (mem == base_mem) { st->print(" -"); continue; }
     st->print( " N%d:", mem->_idx );
     Compile::current()->get_adr_type(i)->dump_on(st);