# HG changeset patch # User Thomas Wuerthinger # Date 1321404751 -3600 # Node ID e53cfcb230a78ff519d390aa9300a98c052efba8 # Parent ff6a991c6e3c4485b26c97e34948c985d66708b1 Fixed an issue with the runtime queried escape analysis field array. diff -r ff6a991c6e3c -r e53cfcb230a7 src/share/vm/graal/graalVMEntries.cpp --- a/src/share/vm/graal/graalVMEntries.cpp Wed Nov 16 01:48:25 2011 +0100 +++ b/src/share/vm/graal/graalVMEntries.cpp Wed Nov 16 01:52:31 2011 +0100 @@ -774,28 +774,30 @@ VM_ENTRY_MARK; instanceKlassHandle k = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)); - objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::RiField_klass(), k->fields()->length() / instanceKlass::next_offset, CHECK_NULL); class MyFieldClosure : public FieldClosure { public: instanceKlassHandle _holder; Handle _resolved_type_holder; - objArrayHandle _field_array; - int _current; + GrowableArray _field_array; - MyFieldClosure(instanceKlassHandle& holder, Handle resolved_type_holder, objArrayHandle field_array) : _holder(holder), _resolved_type_holder(resolved_type_holder), _field_array(field_array), _current(0) { } + MyFieldClosure(instanceKlassHandle& holder, Handle resolved_type_holder) : _holder(holder), _resolved_type_holder(resolved_type_holder) { } virtual void do_field(fieldDescriptor* fd) { if (!Thread::current()->has_pending_exception()) { if (fd->field_holder() == _holder()) { Handle type = GraalCompiler::get_RiTypeFromSignature(fd->constants(), fd->signature_index(), fd->field_holder(), Thread::current()); Handle field = VMExits::createRiField(_resolved_type_holder, VmIds::toString(fd->name(), Thread::current()), type, fd->offset(), fd->access_flags().as_int(), Thread::current()); - _field_array->obj_at_put(_current++, field()); + _field_array.append(field()); } } } }; - MyFieldClosure closure(k, JNIHandles::resolve(klass), field_array); + MyFieldClosure closure(k, JNIHandles::resolve(klass)); k->do_nonstatic_fields(&closure); + objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::RiField_klass(), closure._field_array.length(), CHECK_NULL); + for (int i=0; iobj_at_put(i, closure._field_array.at(i)()); + } return JNIHandles::make_local(field_array()); }