diff src/share/vm/opto/loopnode.cpp @ 3850:6987871cfb9b

7077439: Possible reference through NULL in loopPredicate.cpp:726 Summary: Use cl->is_valid_counted_loop() check. Reviewed-by: never
author kvn
date Wed, 10 Aug 2011 14:06:57 -0700
parents c96c3eb1efae
children 2c24ef16533d
line wrap: on
line diff
--- a/src/share/vm/opto/loopnode.cpp	Tue Aug 02 18:36:40 2011 +0200
+++ b/src/share/vm/opto/loopnode.cpp	Wed Aug 10 14:06:57 2011 -0700
@@ -689,6 +689,7 @@
 Node* PhaseIdealLoop::exact_limit( IdealLoopTree *loop ) {
   assert(loop->_head->is_CountedLoop(), "");
   CountedLoopNode *cl = loop->_head->as_CountedLoop();
+  assert(cl->is_valid_counted_loop(), "");
 
   if (!LoopLimitCheck || ABS(cl->stride_con()) == 1 ||
       cl->limit()->Opcode() == Op_LoopLimit) {
@@ -1608,14 +1609,13 @@
 void PhaseIdealLoop::replace_parallel_iv(IdealLoopTree *loop) {
   assert(loop->_head->is_CountedLoop(), "");
   CountedLoopNode *cl = loop->_head->as_CountedLoop();
+  if (!cl->is_valid_counted_loop())
+    return;         // skip malformed counted loop
   Node *incr = cl->incr();
   if (incr == NULL)
     return;         // Dead loop?
   Node *init = cl->init_trip();
   Node *phi  = cl->phi();
-  // protect against stride not being a constant
-  if (!cl->stride_is_con())
-    return;
   int stride_con = cl->stride_con();
 
   PhaseGVN *gvn = &_igvn;