Mercurial > hg > graal-jvmci-8
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 } |