comparison src/share/vm/ci/ciMethodBlocks.cpp @ 646:039a914095f4

6772368: REGRESSION:tomcat crashed twice with JDK 7 Summary: Call make_block_at() with the original handler limits. Reviewed-by: never
author kvn
date Wed, 18 Mar 2009 13:25:02 -0700
parents 194b8e3a2fc4
children bd02caa94611
comparison
equal deleted inserted replaced
645:c3a720eefe82 646:039a914095f4
282 // The try block above is divided into 2 exception blocks 282 // The try block above is divided into 2 exception blocks
283 // separated by 'areturn' bci. 283 // separated by 'areturn' bci.
284 // 284 //
285 int ex_start = handler->start(); 285 int ex_start = handler->start();
286 int ex_end = handler->limit(); 286 int ex_end = handler->limit();
287 // ensure a block at the start of exception range and start of following code
288 (void) make_block_at(ex_start);
289 if (ex_end < _code_size)
290 (void) make_block_at(ex_end);
291
287 if (eb->is_handler()) { 292 if (eb->is_handler()) {
288 // Extend old handler exception range to cover additional range. 293 // Extend old handler exception range to cover additional range.
289 int old_ex_start = eb->ex_start_bci(); 294 int old_ex_start = eb->ex_start_bci();
290 int old_ex_end = eb->ex_limit_bci(); 295 int old_ex_end = eb->ex_limit_bci();
291 if (ex_start > old_ex_start) 296 if (ex_start > old_ex_start)
293 if (ex_end < old_ex_end) 298 if (ex_end < old_ex_end)
294 ex_end = old_ex_end; 299 ex_end = old_ex_end;
295 eb->clear_exception_handler(); // Reset exception information 300 eb->clear_exception_handler(); // Reset exception information
296 } 301 }
297 eb->set_exception_range(ex_start, ex_end); 302 eb->set_exception_range(ex_start, ex_end);
298 // ensure a block at the start of exception range and start of following code
299 (void) make_block_at(ex_start);
300 if (ex_end < _code_size)
301 (void) make_block_at(ex_end);
302 } 303 }
303 } 304 }
304 305
305 // scan the bytecodes and identify blocks 306 // scan the bytecodes and identify blocks
306 do_analysis(); 307 do_analysis();