Index: vm/include/open/vm.h =================================================================== --- vm/include/open/vm.h (revision 505214) +++ vm/include/open/vm.h (working copy) @@ -812,6 +812,15 @@ VMEXPORT Class_Handle type_info_get_class(Type_Info_Handle tih); /** + * Get the class if type_info_is_reference or + * type_info_is_unboxed returned TRUE. + * If the type info is a vector or a general array, return the + * class handle for the array type (not the element type). + * Does not leave any exception on stack. + */ +VMEXPORT Class_Handle type_info_get_class_no_exn(Type_Info_Handle tih); + +/** * Get the method signature if type_info_is_method_pointer * returned TRUE. */ Index: vm/vmcore/src/class_support/C_Interface.cpp =================================================================== --- vm/vmcore/src/class_support/C_Interface.cpp (revision 505214) +++ vm/vmcore/src/class_support/C_Interface.cpp (working copy) @@ -2031,6 +2031,12 @@ return c; } //type_info_get_class +Class_Handle type_info_get_class_no_exn(Type_Info_Handle tih) +{ + Class_Handle ch = type_info_get_class(tih); + exn_clear(); + return ch; +} // type_info_get_class_no_exn Method_Signature_Handle type_info_get_method_sig(Type_Info_Handle UNREF tih) { Index: vm/jitrino/src/vm/drl/DrlVMInterface.cpp =================================================================== --- vm/jitrino/src/vm/drl/DrlVMInterface.cpp (revision 505214) +++ vm/jitrino/src/vm/drl/DrlVMInterface.cpp (working copy) @@ -527,7 +527,7 @@ // void return type type = typeManager.getVoidType(); } else if (type_info_is_reference(typeHandle)) { - Class_Handle classHandle = type_info_get_class(typeHandle); + Class_Handle classHandle = type_info_get_class_no_exn(typeHandle); if (!classHandle) return NULL; type = typeManager.getObjectType(classHandle);