diff -r 7139e81efd2d -r e5dfb3ccb88b src/share/vm/opto/macro.cpp --- a/src/share/vm/opto/macro.cpp Thu Jul 22 15:29:22 2010 -0700 +++ b/src/share/vm/opto/macro.cpp Fri Jul 23 10:07:46 2010 -0700 @@ -720,7 +720,7 @@ if (basic_elem_type == T_OBJECT || basic_elem_type == T_ARRAY) { if (!elem_type->is_loaded()) { field_type = TypeInstPtr::BOTTOM; - } else if (field != NULL && field->is_constant()) { + } else if (field != NULL && field->is_constant() && field->is_static()) { // This can happen if the constant oop is non-perm. ciObject* con = field->constant_value().as_object(); // Do not "join" in the previous type; it doesn't add value,