# HG changeset patch # User Christian Haeubl # Date 1332264819 25200 # Node ID 3d0556d10a2bfc6ad73e6b39448013cb362143c9 # Parent 9b940aff6c6bcbbdc60d03b870a60b6e10026531# Parent 9ec2917fd0de3e24eec69938a9d7f80b9bdb79cb Merge diff -r 9b940aff6c6b -r 3d0556d10a2b src/share/vm/graal/graalCodeInstaller.cpp --- a/src/share/vm/graal/graalCodeInstaller.cpp Tue Mar 20 10:32:34 2012 -0700 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Tue Mar 20 10:33:39 2012 -0700 @@ -179,6 +179,7 @@ oop type = CiVirtualObject::type(value); int id = CiVirtualObject::id(value); klassOop klass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)); + bool isLongArray = klass == Universe::longArrayKlassObj(); for (jint i = 0; i < objects->length(); i++) { ObjectValue* obj = (ObjectValue*) objects->at(i); @@ -198,6 +199,17 @@ ScopeValue* cur_second = NULL; ScopeValue* value = get_hotspot_value(((oop*) values->base(T_OBJECT))[i], total_frame_size, objects, cur_second); + if (isLongArray && cur_second == NULL) { + // we're trying to put ints into a long array... this isn't really valid, but it's used for some optimizations. + // add an int 0 constant +#ifdef BIG_ENDIAN + cur_second = value; + value = new ConstantIntValue(0); +#else + cur_second = new ConstantIntValue(0); +#endif + } + if (cur_second != NULL) { sv->field_values()->append(cur_second); }