hotspot/src/share/vm/opto/addnode.cpp
changeset 2254 f13dda645a4b
parent 1432 44f076e3d2a4
child 3261 c7d5aae8d3f7
--- a/hotspot/src/share/vm/opto/addnode.cpp	Wed Mar 11 14:16:13 2009 -0700
+++ b/hotspot/src/share/vm/opto/addnode.cpp	Thu Mar 12 10:37:46 2009 -0700
@@ -756,7 +756,13 @@
       if ( eti == NULL ) {
         // there must be one pointer among the operands
         guarantee(tptr == NULL, "must be only one pointer operand");
-        tptr = et->isa_oopptr();
+        if (UseCompressedOops && Universe::narrow_oop_shift() == 0) {
+          // 32-bits narrow oop can be the base of address expressions
+          tptr = et->make_ptr()->isa_oopptr();
+        } else {
+          // only regular oops are expected here
+          tptr = et->isa_oopptr();
+        }
         guarantee(tptr != NULL, "non-int operand must be pointer");
         if (tptr->higher_equal(tp->add_offset(tptr->offset())))
           tp = tptr; // Set more precise type for bailout