Index: vm/vmcore/src/class_support/Class_File_Loader.cpp =================================================================== --- vm/vmcore/src/class_support/Class_File_Loader.cpp (revision 526088) +++ vm/vmcore/src/class_support/Class_File_Loader.cpp (working copy) @@ -1746,8 +1746,10 @@ // so we have no reason to cross-check these tables // See specification 4.8.12 second paragraph. if (generic_vars && lv_table) { - unsigned j = i = 0; - for (i = 0; i < generic_vars->length && j != lv_table->length; i++) { + bool found = true; + unsigned i, j; + for (i = 0; i < generic_vars->length && found; i++) { + found = false; for (j = 0; j < lv_table->length; j++) { if (generic_vars->table[i].name == lv_table->table[j].name && generic_vars->table[i].start_pc == lv_table->table[j].start_pc @@ -1755,17 +1757,23 @@ && generic_vars->table[i].index == lv_table->table[j].index) { lv_table->table[j].generic_type = generic_vars->table[i].type; + found = true; break; } } } - String* gvi_name = generic_vars->table[i].name; + + String* gvi_name = NULL; + if(!found) { + gvi_name = generic_vars->table[i - 1].name; + } if( num_lvtt_entries >= LV_ALLOCATION_THRESHOLD ){ STD_FREE(generic_vars); } - if(j == lv_table->length) { + if(!found) { REPORT_FAILED_METHOD("Element: "<< gvi_name->bytes << " in LocalVariableTypeTable has no counterpart or differs from element in LocalVariableTable"); + return false; } }