1.1 --- a/src/share/vm/opto/addnode.cpp Wed Mar 18 11:37:48 2009 -0400 1.2 +++ b/src/share/vm/opto/addnode.cpp Thu Mar 19 09:13:24 2009 -0700 1.3 @@ -756,7 +756,13 @@ 1.4 if ( eti == NULL ) { 1.5 // there must be one pointer among the operands 1.6 guarantee(tptr == NULL, "must be only one pointer operand"); 1.7 - tptr = et->isa_oopptr(); 1.8 + if (UseCompressedOops && Universe::narrow_oop_shift() == 0) { 1.9 + // 32-bits narrow oop can be the base of address expressions 1.10 + tptr = et->make_ptr()->isa_oopptr(); 1.11 + } else { 1.12 + // only regular oops are expected here 1.13 + tptr = et->isa_oopptr(); 1.14 + } 1.15 guarantee(tptr != NULL, "non-int operand must be pointer"); 1.16 if (tptr->higher_equal(tp->add_offset(tptr->offset()))) 1.17 tp = tptr; // Set more precise type for bailout