# HG changeset patch # User twisti # Date 1338405427 25200 # Node ID c8289830e1725326110221ccbfc73c3b0c58adbb # Parent 4d8787136e08639e4e273ebab6f14a69c10221aa 7172843: C1: fix "assert(has_printable_bci()) failed: _printable_bci should have been set" Reviewed-by: twisti Contributed-by: Krystal Mok diff -r 4d8787136e08 -r c8289830e172 src/share/vm/c1/c1_Canonicalizer.cpp --- a/src/share/vm/c1/c1_Canonicalizer.cpp Fri May 25 11:39:13 2012 -0700 +++ b/src/share/vm/c1/c1_Canonicalizer.cpp Wed May 30 12:17:07 2012 -0700 @@ -42,6 +42,11 @@ // the instruction stream (because the instruction list is embedded // in the instructions). if (canonical() != x) { +#ifndef PRODUCT + if (!x->has_printable_bci()) { + x->set_printable_bci(bci()); + } +#endif if (PrintCanonicalization) { PrintValueVisitor do_print_value; canonical()->input_values_do(&do_print_value); @@ -677,8 +682,8 @@ return; } } + set_bci(cmp->state_before()->bci()); set_canonical(canon); - set_bci(cmp->state_before()->bci()); } } } else if (l->as_InstanceOf() != NULL) { diff -r 4d8787136e08 -r c8289830e172 src/share/vm/c1/c1_Instruction.hpp --- a/src/share/vm/c1/c1_Instruction.hpp Fri May 25 11:39:13 2012 -0700 +++ b/src/share/vm/c1/c1_Instruction.hpp Wed May 30 12:17:07 2012 -0700 @@ -302,8 +302,6 @@ void update_exception_state(ValueStack* state); - bool has_printable_bci() const { return NOT_PRODUCT(_printable_bci != -99) PRODUCT_ONLY(false); } - protected: void set_type(ValueType* type) { assert(type != NULL, "type must exist"); @@ -392,8 +390,9 @@ // accessors int id() const { return _id; } #ifndef PRODUCT + bool has_printable_bci() const { return _printable_bci != -99; } int printable_bci() const { assert(has_printable_bci(), "_printable_bci should have been set"); return _printable_bci; } - void set_printable_bci(int bci) { NOT_PRODUCT(_printable_bci = bci;) } + void set_printable_bci(int bci) { _printable_bci = bci; } #endif int use_count() const { return _use_count; } int pin_state() const { return _pin_state; } @@ -576,6 +575,7 @@ , _block(b) , _index(index) { + NOT_PRODUCT(set_printable_bci(Value(b)->printable_bci())); if (type->is_illegal()) { make_illegal(); } @@ -631,7 +631,9 @@ : Instruction(type) , _java_index(index) , _declared_type(declared) - {} + { + NOT_PRODUCT(set_printable_bci(-1)); + } // accessors int java_index() const { return _java_index; }