6889869: assert(!Interpreter::bytecode_should_reexecute(code),"should not reexecute")
Reviewed-by: jrose, kvn, cfang, twisti
--- a/hotspot/src/share/vm/code/debugInfoRec.cpp Tue Oct 13 22:32:31 2009 -0700
+++ b/hotspot/src/share/vm/code/debugInfoRec.cpp Wed Oct 14 10:36:57 2009 -0700
@@ -356,8 +356,7 @@
// search forward until it finds last.
// In addition, it does not matter if the last PcDesc
// is for a safepoint or not.
- if (_prev_safepoint_pc < prev->pc_offset() &&
- prev->scope_decode_offset() == last->scope_decode_offset()) {
+ if (_prev_safepoint_pc < prev->pc_offset() && prev->is_same_info(last)) {
assert(prev == last-1, "sane");
prev->set_pc_offset(pc_offset);
_pcs_length -= 1;
--- a/hotspot/src/share/vm/code/pcDesc.hpp Tue Oct 13 22:32:31 2009 -0700
+++ b/hotspot/src/share/vm/code/pcDesc.hpp Wed Oct 14 10:36:57 2009 -0700
@@ -39,6 +39,7 @@
struct {
unsigned int reexecute: 1;
} bits;
+ bool operator ==(const PcDescFlags& other) { return word == other.word; }
} _flags;
public:
@@ -64,6 +65,13 @@
bool should_reexecute() const { return _flags.bits.reexecute; }
void set_should_reexecute(bool z) { _flags.bits.reexecute = z; }
+ // Does pd refer to the same information as pd?
+ bool is_same_info(const PcDesc* pd) {
+ return _scope_decode_offset == pd->_scope_decode_offset &&
+ _obj_decode_offset == pd->_obj_decode_offset &&
+ _flags == pd->_flags;
+ }
+
// Returns the real pc
address real_pc(const nmethod* code) const;