comparison src/share/vm/ci/bcEscapeAnalyzer.cpp @ 4869:5ed8f599a788

7140924: SIGSEGV in compiled code for sun.awt.X11.XDecoratedPeer.updateMinSizeHints Summary: Use unknown_obj instead of empty_map for NULL or Constant Pool object constants in bytecode Escape Analyzer. Reviewed-by: iveresov, never
author kvn
date Tue, 31 Jan 2012 07:18:03 -0800
parents cc81b9c09bbb
children 1d7922586cf6
comparison
equal deleted inserted replaced
4868:5f17b16b3219 4869:5ed8f599a788
1 /* 1 /*
2 * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
357 fall_through = true; 357 fall_through = true;
358 switch (s.cur_bc()) { 358 switch (s.cur_bc()) {
359 case Bytecodes::_nop: 359 case Bytecodes::_nop:
360 break; 360 break;
361 case Bytecodes::_aconst_null: 361 case Bytecodes::_aconst_null:
362 state.apush(empty_map); 362 state.apush(unknown_obj);
363 break; 363 break;
364 case Bytecodes::_iconst_m1: 364 case Bytecodes::_iconst_m1:
365 case Bytecodes::_iconst_0: 365 case Bytecodes::_iconst_0:
366 case Bytecodes::_iconst_1: 366 case Bytecodes::_iconst_1:
367 case Bytecodes::_iconst_2: 367 case Bytecodes::_iconst_2:
390 int index = s.get_constant_pool_index(); 390 int index = s.get_constant_pool_index();
391 constantTag tag = s.get_constant_pool_tag(index); 391 constantTag tag = s.get_constant_pool_tag(index);
392 if (tag.is_long() || tag.is_double()) { 392 if (tag.is_long() || tag.is_double()) {
393 // Only longs and doubles use 2 stack slots. 393 // Only longs and doubles use 2 stack slots.
394 state.lpush(); 394 state.lpush();
395 } else if (tag.basic_type() == T_OBJECT) {
396 state.apush(unknown_obj);
395 } else { 397 } else {
396 state.spush(); 398 state.spush();
397 } 399 }
398 break; 400 break;
399 } 401 }