1 /*
   2  * Copyright 1998-2008 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20  * CA 95054 USA or visit www.sun.com if you need additional information or
  21  * have any questions.
  22  *
  23  */
  24 
  25 # include "incls/_precompiled.incl"
  26 # include "incls/_verifier.cpp.incl"
  27 
  28 // Access to external entry for VerifyClassCodes - old byte code verifier
  29 
  30 extern "C" {
  31   typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint);
  32   typedef jboolean (*verify_byte_codes_fn_new_t)(JNIEnv *, jclass, char *, jint, jint);
  33 }
  34 
  35 static void* volatile _verify_byte_codes_fn = NULL;
  36 
  37 static volatile jint _is_new_verify_byte_codes_fn = (jint) true;
  38 
  39 static void* verify_byte_codes_fn() {
  40   if (_verify_byte_codes_fn == NULL) {
  41     void *lib_handle = os::native_java_library();
  42     void *func = hpi::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion");
  43     OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
  44     if (func == NULL) {
  45       OrderAccess::release_store(&_is_new_verify_byte_codes_fn, false);
  46       func = hpi::dll_lookup(lib_handle, "VerifyClassCodes");
  47       OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
  48     }
  49   }
  50   return (void*)_verify_byte_codes_fn;
  51 }
  52 
  53 
  54 // Methods in Verifier
  55 
  56 bool Verifier::should_verify_for(oop class_loader) {
  57   return class_loader == NULL ?
  58     BytecodeVerificationLocal : BytecodeVerificationRemote;
  59 }
  60 
  61 bool Verifier::relax_verify_for(oop loader) {
  62   bool trusted = java_lang_ClassLoader::is_trusted_loader(loader);
  63   bool need_verify =
  64     // verifyAll
  65     (BytecodeVerificationLocal && BytecodeVerificationRemote) ||
  66     // verifyRemote
  67     (!BytecodeVerificationLocal && BytecodeVerificationRemote && !trusted);
  68   return !need_verify;
  69 }
  70 
  71 bool Verifier::verify(instanceKlassHandle klass, Verifier::Mode mode, TRAPS) {
  72   ResourceMark rm(THREAD);
  73   HandleMark hm;
  74 
  75   symbolHandle exception_name;
  76   const size_t message_buffer_len = klass->name()->utf8_length() + 1024;
  77   char* message_buffer = NEW_RESOURCE_ARRAY(char, message_buffer_len);
  78 
  79   const char* klassName = klass->external_name();
  80 
  81   // If the class should be verified, first see if we can use the split
  82   // verifier.  If not, or if verification fails and FailOverToOldVerifier
  83   // is set, then call the inference verifier.
  84   if (is_eligible_for_verification(klass)) {
  85     if (TraceClassInitialization) {
  86       tty->print_cr("Start class verification for: %s", klassName);
  87     }
  88     if (UseSplitVerifier &&
  89         klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) {
  90         ClassVerifier split_verifier(
  91           klass, message_buffer, message_buffer_len, THREAD);
  92         split_verifier.verify_class(THREAD);
  93         exception_name = split_verifier.result();
  94       if (FailOverToOldVerifier && !HAS_PENDING_EXCEPTION &&
  95           (exception_name == vmSymbols::java_lang_VerifyError() ||
  96            exception_name == vmSymbols::java_lang_ClassFormatError())) {
  97         if (TraceClassInitialization) {
  98           tty->print_cr(
  99             "Fail over class verification to old verifier for: %s", klassName);
 100         }
 101         exception_name = inference_verify(
 102           klass, message_buffer, message_buffer_len, THREAD);
 103       }
 104     } else {
 105       exception_name = inference_verify(
 106           klass, message_buffer, message_buffer_len, THREAD);
 107     }
 108 
 109     if (TraceClassInitialization) {
 110       if (HAS_PENDING_EXCEPTION) {
 111         tty->print("Verification for %s has", klassName);
 112         tty->print_cr(" exception pending %s ",
 113           instanceKlass::cast(PENDING_EXCEPTION->klass())->external_name());
 114       } else if (!exception_name.is_null()) {
 115         tty->print_cr("Verification for %s failed", klassName);
 116       }
 117       tty->print_cr("End class verification for: %s", klassName);
 118     }
 119   }
 120 
 121   if (HAS_PENDING_EXCEPTION) {
 122     return false; // use the existing exception
 123   } else if (exception_name.is_null()) {
 124     return true; // verifcation succeeded
 125   } else { // VerifyError or ClassFormatError to be created and thrown
 126     ResourceMark rm(THREAD);
 127     instanceKlassHandle kls =
 128       SystemDictionary::resolve_or_fail(exception_name, true, CHECK_false);
 129     while (!kls.is_null()) {
 130       if (kls == klass) {
 131         // If the class being verified is the exception we're creating
 132         // or one of it's superclasses, we're in trouble and are going
 133         // to infinitely recurse when we try to initialize the exception.
 134         // So bail out here by throwing the preallocated VM error.
 135         THROW_OOP_(Universe::virtual_machine_error_instance(), false);
 136       }
 137       kls = kls->super();
 138     }
 139     message_buffer[message_buffer_len - 1] = '\0'; // just to be sure
 140     THROW_MSG_(exception_name, message_buffer, false);
 141   }
 142 }
 143 
 144 bool Verifier::is_eligible_for_verification(instanceKlassHandle klass) {
 145   symbolOop name = klass->name();
 146   klassOop refl_magic_klass = SystemDictionary::reflect_magic_klass();
 147 
 148   return (should_verify_for(klass->class_loader()) &&
 149     // return if the class is a bootstrapping class
 150     // We need to skip the following four for bootstraping
 151     name != vmSymbols::java_lang_Object() &&
 152     name != vmSymbols::java_lang_Class() &&
 153     name != vmSymbols::java_lang_String() &&
 154     name != vmSymbols::java_lang_Throwable() &&
 155 
 156     // Can not verify the bytecodes for shared classes because they have
 157     // already been rewritten to contain constant pool cache indices,
 158     // which the verifier can't understand.
 159     // Shared classes shouldn't have stackmaps either.
 160     !klass()->is_shared() &&
 161 
 162     // As of the fix for 4486457 we disable verification for all of the
 163     // dynamically-generated bytecodes associated with the 1.4
 164     // reflection implementation, not just those associated with
 165     // sun/reflect/SerializationConstructorAccessor.
 166     // NOTE: this is called too early in the bootstrapping process to be
 167     // guarded by Universe::is_gte_jdk14x_version()/UseNewReflection.
 168     (refl_magic_klass == NULL ||
 169      !klass->is_subtype_of(refl_magic_klass) ||
 170      VerifyReflectionBytecodes)
 171   );
 172 }
 173 
 174 symbolHandle Verifier::inference_verify(
 175     instanceKlassHandle klass, char* message, size_t message_len, TRAPS) {
 176   JavaThread* thread = (JavaThread*)THREAD;
 177   JNIEnv *env = thread->jni_environment();
 178 
 179   void* verify_func = verify_byte_codes_fn();
 180 
 181   if (verify_func == NULL) {
 182     jio_snprintf(message, message_len, "Could not link verifier");
 183     return vmSymbols::java_lang_VerifyError();
 184   }
 185 
 186   ResourceMark rm(THREAD);
 187   if (ClassVerifier::_verify_verbose) {
 188     tty->print_cr("Verifying class %s with old format", klass->external_name());
 189   }
 190 
 191   jclass cls = (jclass) JNIHandles::make_local(env, klass->java_mirror());
 192   jint result;
 193 
 194   {
 195     HandleMark hm(thread);
 196     ThreadToNativeFromVM ttn(thread);
 197     // ThreadToNativeFromVM takes care of changing thread_state, so safepoint
 198     // code knows that we have left the VM
 199 
 200     if (_is_new_verify_byte_codes_fn) {
 201       verify_byte_codes_fn_new_t func =
 202         CAST_TO_FN_PTR(verify_byte_codes_fn_new_t, verify_func);
 203       result = (*func)(env, cls, message, (int)message_len,
 204           klass->major_version());
 205     } else {
 206       verify_byte_codes_fn_t func =
 207         CAST_TO_FN_PTR(verify_byte_codes_fn_t, verify_func);
 208       result = (*func)(env, cls, message, (int)message_len);
 209     }
 210   }
 211 
 212   JNIHandles::destroy_local(cls);
 213 
 214   // These numbers are chosen so that VerifyClassCodes interface doesn't need
 215   // to be changed (still return jboolean (unsigned char)), and result is
 216   // 1 when verification is passed.
 217   symbolHandle nh(NULL);
 218   if (result == 0) {
 219     return vmSymbols::java_lang_VerifyError();
 220   } else if (result == 1) {
 221     return nh; // verified.
 222   } else if (result == 2) {
 223     THROW_MSG_(vmSymbols::java_lang_OutOfMemoryError(), message, nh);
 224   } else if (result == 3) {
 225     return vmSymbols::java_lang_ClassFormatError();
 226   } else {
 227     ShouldNotReachHere();
 228     return nh;
 229   }
 230 }
 231 
 232 // Methods in ClassVerifier
 233 
 234 bool ClassVerifier::_verify_verbose = false;
 235 
 236 ClassVerifier::ClassVerifier(
 237     instanceKlassHandle klass, char* msg, size_t msg_len, TRAPS)
 238     : _thread(THREAD), _exception_type(symbolHandle()), _message(msg),
 239       _message_buffer_len(msg_len), _klass(klass) {
 240   _this_type = VerificationType::reference_type(klass->name());
 241 }
 242 
 243 ClassVerifier::~ClassVerifier() {
 244 }
 245 
 246 void ClassVerifier::verify_class(TRAPS) {
 247   if (_verify_verbose) {
 248     tty->print_cr("Verifying class %s with new format",
 249       _klass->external_name());
 250   }
 251 
 252   objArrayHandle methods(THREAD, _klass->methods());
 253   int num_methods = methods->length();
 254 
 255   for (int index = 0; index < num_methods; index++) {
 256     methodOop m = (methodOop)methods->obj_at(index);
 257     if (m->is_native() || m->is_abstract()) {
 258       // If m is native or abstract, skip it.  It is checked in class file
 259       // parser that methods do not override a final method.
 260       continue;
 261     }
 262     verify_method(methodHandle(THREAD, m), CHECK_VERIFY(this));
 263   }
 264 }
 265 
 266 void ClassVerifier::verify_method(methodHandle m, TRAPS) {
 267   ResourceMark rm(THREAD);
 268   _method = m;   // initialize _method
 269   if (_verify_verbose) {
 270     tty->print_cr("Verifying method %s", m->name_and_sig_as_C_string());
 271   }
 272 
 273   const char* bad_type_msg = "Bad type on operand stack in %s";
 274 
 275   int32_t max_stack = m->max_stack();
 276   int32_t max_locals = m->max_locals();
 277   constantPoolHandle cp(THREAD, m->constants());
 278 
 279   if (!SignatureVerifier::is_valid_method_signature(m->signature())) {
 280     class_format_error("Invalid method signature");
 281     return;
 282   }
 283 
 284   // Initial stack map frame: offset is 0, stack is initially empty.
 285   StackMapFrame current_frame(max_locals, max_stack, this);
 286   // Set initial locals
 287   VerificationType return_type = current_frame.set_locals_from_arg(
 288     m, current_type(), CHECK_VERIFY(this));
 289 
 290   int32_t stackmap_index = 0; // index to the stackmap array
 291 
 292   u4 code_length = m->code_size();
 293 
 294   // Scan the bytecode and map each instruction's start offset to a number.
 295   char* code_data = generate_code_data(m, code_length, CHECK_VERIFY(this));
 296 
 297   int ex_min = code_length;
 298   int ex_max = -1;
 299   // Look through each item on the exception table. Each of the fields must refer
 300   // to a legal instruction.
 301   verify_exception_handler_table(
 302     code_length, code_data, ex_min, ex_max, CHECK_VERIFY(this));
 303 
 304   // Look through each entry on the local variable table and make sure
 305   // its range of code array offsets is valid. (4169817)
 306   if (m->has_localvariable_table()) {
 307     verify_local_variable_table(code_length, code_data, CHECK_VERIFY(this));
 308   }
 309 
 310   typeArrayHandle stackmap_data(THREAD, m->stackmap_data());
 311   StackMapStream stream(stackmap_data);
 312   StackMapReader reader(this, &stream, code_data, code_length, THREAD);
 313   StackMapTable stackmap_table(&reader, &current_frame, max_locals, max_stack,
 314                                code_data, code_length, CHECK_VERIFY(this));
 315 
 316   if (_verify_verbose) {
 317     stackmap_table.print();
 318   }
 319 
 320   RawBytecodeStream bcs(m);
 321 
 322   // Scan the byte code linearly from the start to the end
 323   bool no_control_flow = false; // Set to true when there is no direct control
 324                                 // flow from current instruction to the next
 325                                 // instruction in sequence
 326   Bytecodes::Code opcode;
 327   while (!bcs.is_last_bytecode()) {
 328     opcode = bcs.raw_next();
 329     u2 bci = bcs.bci();
 330 
 331     // Set current frame's offset to bci
 332     current_frame.set_offset(bci);
 333 
 334     // Make sure every offset in stackmap table point to the beginning to
 335     // an instruction. Match current_frame to stackmap_table entry with
 336     // the same offset if exists.
 337     stackmap_index = verify_stackmap_table(
 338       stackmap_index, bci, &current_frame, &stackmap_table,
 339       no_control_flow, CHECK_VERIFY(this));
 340 
 341     bool this_uninit = false;  // Set to true when invokespecial <init> initialized 'this'
 342 
 343     // Merge with the next instruction
 344     {
 345       u2 index;
 346       int target;
 347       VerificationType type, type2;
 348       VerificationType atype;
 349 
 350 #ifndef PRODUCT
 351       if (_verify_verbose) {
 352         current_frame.print();
 353         tty->print_cr("offset = %d,  opcode = %s", bci, Bytecodes::name(opcode));
 354       }
 355 #endif
 356 
 357       // Make sure wide instruction is in correct format
 358       if (bcs.is_wide()) {
 359         if (opcode != Bytecodes::_iinc   && opcode != Bytecodes::_iload  &&
 360             opcode != Bytecodes::_aload  && opcode != Bytecodes::_lload  &&
 361             opcode != Bytecodes::_istore && opcode != Bytecodes::_astore &&
 362             opcode != Bytecodes::_lstore && opcode != Bytecodes::_fload  &&
 363             opcode != Bytecodes::_dload  && opcode != Bytecodes::_fstore &&
 364             opcode != Bytecodes::_dstore) {
 365           verify_error(bci, "Bad wide instruction");
 366           return;
 367         }
 368       }
 369 
 370       switch (opcode) {
 371         case Bytecodes::_nop :
 372           no_control_flow = false; break;
 373         case Bytecodes::_aconst_null :
 374           current_frame.push_stack(
 375             VerificationType::null_type(), CHECK_VERIFY(this));
 376           no_control_flow = false; break;
 377         case Bytecodes::_iconst_m1 :
 378         case Bytecodes::_iconst_0 :
 379         case Bytecodes::_iconst_1 :
 380         case Bytecodes::_iconst_2 :
 381         case Bytecodes::_iconst_3 :
 382         case Bytecodes::_iconst_4 :
 383         case Bytecodes::_iconst_5 :
 384           current_frame.push_stack(
 385             VerificationType::integer_type(), CHECK_VERIFY(this));
 386           no_control_flow = false; break;
 387         case Bytecodes::_lconst_0 :
 388         case Bytecodes::_lconst_1 :
 389           current_frame.push_stack_2(
 390             VerificationType::long_type(),
 391             VerificationType::long2_type(), CHECK_VERIFY(this));
 392           no_control_flow = false; break;
 393         case Bytecodes::_fconst_0 :
 394         case Bytecodes::_fconst_1 :
 395         case Bytecodes::_fconst_2 :
 396           current_frame.push_stack(
 397             VerificationType::float_type(), CHECK_VERIFY(this));
 398           no_control_flow = false; break;
 399         case Bytecodes::_dconst_0 :
 400         case Bytecodes::_dconst_1 :
 401           current_frame.push_stack_2(
 402             VerificationType::double_type(),
 403             VerificationType::double2_type(), CHECK_VERIFY(this));
 404           no_control_flow = false; break;
 405         case Bytecodes::_sipush :
 406         case Bytecodes::_bipush :
 407           current_frame.push_stack(
 408             VerificationType::integer_type(), CHECK_VERIFY(this));
 409           no_control_flow = false; break;
 410         case Bytecodes::_ldc :
 411           verify_ldc(
 412             opcode, bcs.get_index(), &current_frame,
 413             cp, bci, CHECK_VERIFY(this));
 414           no_control_flow = false; break;
 415         case Bytecodes::_ldc_w :
 416         case Bytecodes::_ldc2_w :
 417           verify_ldc(
 418             opcode, bcs.get_index_big(), &current_frame,
 419             cp, bci, CHECK_VERIFY(this));
 420           no_control_flow = false; break;
 421         case Bytecodes::_iload :
 422           verify_iload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 423           no_control_flow = false; break;
 424         case Bytecodes::_iload_0 :
 425         case Bytecodes::_iload_1 :
 426         case Bytecodes::_iload_2 :
 427         case Bytecodes::_iload_3 :
 428           index = opcode - Bytecodes::_iload_0;
 429           verify_iload(index, &current_frame, CHECK_VERIFY(this));
 430           no_control_flow = false; break;
 431         case Bytecodes::_lload :
 432           verify_lload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 433           no_control_flow = false; break;
 434         case Bytecodes::_lload_0 :
 435         case Bytecodes::_lload_1 :
 436         case Bytecodes::_lload_2 :
 437         case Bytecodes::_lload_3 :
 438           index = opcode - Bytecodes::_lload_0;
 439           verify_lload(index, &current_frame, CHECK_VERIFY(this));
 440           no_control_flow = false; break;
 441         case Bytecodes::_fload :
 442           verify_fload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 443           no_control_flow = false; break;
 444         case Bytecodes::_fload_0 :
 445         case Bytecodes::_fload_1 :
 446         case Bytecodes::_fload_2 :
 447         case Bytecodes::_fload_3 :
 448           index = opcode - Bytecodes::_fload_0;
 449           verify_fload(index, &current_frame, CHECK_VERIFY(this));
 450           no_control_flow = false; break;
 451         case Bytecodes::_dload :
 452           verify_dload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 453           no_control_flow = false; break;
 454         case Bytecodes::_dload_0 :
 455         case Bytecodes::_dload_1 :
 456         case Bytecodes::_dload_2 :
 457         case Bytecodes::_dload_3 :
 458           index = opcode - Bytecodes::_dload_0;
 459           verify_dload(index, &current_frame, CHECK_VERIFY(this));
 460           no_control_flow = false; break;
 461         case Bytecodes::_aload :
 462           verify_aload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 463           no_control_flow = false; break;
 464         case Bytecodes::_aload_0 :
 465         case Bytecodes::_aload_1 :
 466         case Bytecodes::_aload_2 :
 467         case Bytecodes::_aload_3 :
 468           index = opcode - Bytecodes::_aload_0;
 469           verify_aload(index, &current_frame, CHECK_VERIFY(this));
 470           no_control_flow = false; break;
 471         case Bytecodes::_iaload :
 472           type = current_frame.pop_stack(
 473             VerificationType::integer_type(), CHECK_VERIFY(this));
 474           atype = current_frame.pop_stack(
 475             VerificationType::reference_check(), CHECK_VERIFY(this));
 476           if (!atype.is_int_array()) {
 477             verify_error(bci, bad_type_msg, "iaload");
 478             return;
 479           }
 480           current_frame.push_stack(
 481             VerificationType::integer_type(), CHECK_VERIFY(this));
 482           no_control_flow = false; break;
 483         case Bytecodes::_baload :
 484           type = current_frame.pop_stack(
 485             VerificationType::integer_type(), CHECK_VERIFY(this));
 486           atype = current_frame.pop_stack(
 487             VerificationType::reference_check(), CHECK_VERIFY(this));
 488           if (!atype.is_bool_array() && !atype.is_byte_array()) {
 489             verify_error(bci, bad_type_msg, "baload");
 490             return;
 491           }
 492           current_frame.push_stack(
 493             VerificationType::integer_type(), CHECK_VERIFY(this));
 494           no_control_flow = false; break;
 495         case Bytecodes::_caload :
 496           type = current_frame.pop_stack(
 497             VerificationType::integer_type(), CHECK_VERIFY(this));
 498           atype = current_frame.pop_stack(
 499             VerificationType::reference_check(), CHECK_VERIFY(this));
 500           if (!atype.is_char_array()) {
 501             verify_error(bci, bad_type_msg, "caload");
 502             return;
 503           }
 504           current_frame.push_stack(
 505             VerificationType::integer_type(), CHECK_VERIFY(this));
 506           no_control_flow = false; break;
 507         case Bytecodes::_saload :
 508           type = current_frame.pop_stack(
 509             VerificationType::integer_type(), CHECK_VERIFY(this));
 510           atype = current_frame.pop_stack(
 511             VerificationType::reference_check(), CHECK_VERIFY(this));
 512           if (!atype.is_short_array()) {
 513             verify_error(bci, bad_type_msg, "saload");
 514             return;
 515           }
 516           current_frame.push_stack(
 517             VerificationType::integer_type(), CHECK_VERIFY(this));
 518           no_control_flow = false; break;
 519         case Bytecodes::_laload :
 520           type = current_frame.pop_stack(
 521             VerificationType::integer_type(), CHECK_VERIFY(this));
 522           atype = current_frame.pop_stack(
 523             VerificationType::reference_check(), CHECK_VERIFY(this));
 524           if (!atype.is_long_array()) {
 525             verify_error(bci, bad_type_msg, "laload");
 526             return;
 527           }
 528           current_frame.push_stack_2(
 529             VerificationType::long_type(),
 530             VerificationType::long2_type(), CHECK_VERIFY(this));
 531           no_control_flow = false; break;
 532         case Bytecodes::_faload :
 533           type = current_frame.pop_stack(
 534             VerificationType::integer_type(), CHECK_VERIFY(this));
 535           atype = current_frame.pop_stack(
 536             VerificationType::reference_check(), CHECK_VERIFY(this));
 537           if (!atype.is_float_array()) {
 538             verify_error(bci, bad_type_msg, "faload");
 539             return;
 540           }
 541           current_frame.push_stack(
 542             VerificationType::float_type(), CHECK_VERIFY(this));
 543           no_control_flow = false; break;
 544         case Bytecodes::_daload :
 545           type = current_frame.pop_stack(
 546             VerificationType::integer_type(), CHECK_VERIFY(this));
 547           atype = current_frame.pop_stack(
 548             VerificationType::reference_check(), CHECK_VERIFY(this));
 549           if (!atype.is_double_array()) {
 550             verify_error(bci, bad_type_msg, "daload");
 551             return;
 552           }
 553           current_frame.push_stack_2(
 554             VerificationType::double_type(),
 555             VerificationType::double2_type(), CHECK_VERIFY(this));
 556           no_control_flow = false; break;
 557         case Bytecodes::_aaload : {
 558           type = current_frame.pop_stack(
 559             VerificationType::integer_type(), CHECK_VERIFY(this));
 560           atype = current_frame.pop_stack(
 561             VerificationType::reference_check(), CHECK_VERIFY(this));
 562           if (!atype.is_reference_array()) {
 563             verify_error(bci, bad_type_msg, "aaload");
 564             return;
 565           }
 566           if (atype.is_null()) {
 567             current_frame.push_stack(
 568               VerificationType::null_type(), CHECK_VERIFY(this));
 569           } else {
 570             VerificationType component =
 571               atype.get_component(CHECK_VERIFY(this));
 572             current_frame.push_stack(component, CHECK_VERIFY(this));
 573           }
 574           no_control_flow = false; break;
 575         }
 576         case Bytecodes::_istore :
 577           verify_istore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 578           no_control_flow = false; break;
 579         case Bytecodes::_istore_0 :
 580         case Bytecodes::_istore_1 :
 581         case Bytecodes::_istore_2 :
 582         case Bytecodes::_istore_3 :
 583           index = opcode - Bytecodes::_istore_0;
 584           verify_istore(index, &current_frame, CHECK_VERIFY(this));
 585           no_control_flow = false; break;
 586         case Bytecodes::_lstore :
 587           verify_lstore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 588           no_control_flow = false; break;
 589         case Bytecodes::_lstore_0 :
 590         case Bytecodes::_lstore_1 :
 591         case Bytecodes::_lstore_2 :
 592         case Bytecodes::_lstore_3 :
 593           index = opcode - Bytecodes::_lstore_0;
 594           verify_lstore(index, &current_frame, CHECK_VERIFY(this));
 595           no_control_flow = false; break;
 596         case Bytecodes::_fstore :
 597           verify_fstore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 598           no_control_flow = false; break;
 599         case Bytecodes::_fstore_0 :
 600         case Bytecodes::_fstore_1 :
 601         case Bytecodes::_fstore_2 :
 602         case Bytecodes::_fstore_3 :
 603           index = opcode - Bytecodes::_fstore_0;
 604           verify_fstore(index, &current_frame, CHECK_VERIFY(this));
 605           no_control_flow = false; break;
 606         case Bytecodes::_dstore :
 607           verify_dstore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 608           no_control_flow = false; break;
 609         case Bytecodes::_dstore_0 :
 610         case Bytecodes::_dstore_1 :
 611         case Bytecodes::_dstore_2 :
 612         case Bytecodes::_dstore_3 :
 613           index = opcode - Bytecodes::_dstore_0;
 614           verify_dstore(index, &current_frame, CHECK_VERIFY(this));
 615           no_control_flow = false; break;
 616         case Bytecodes::_astore :
 617           verify_astore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 618           no_control_flow = false; break;
 619         case Bytecodes::_astore_0 :
 620         case Bytecodes::_astore_1 :
 621         case Bytecodes::_astore_2 :
 622         case Bytecodes::_astore_3 :
 623           index = opcode - Bytecodes::_astore_0;
 624           verify_astore(index, &current_frame, CHECK_VERIFY(this));
 625           no_control_flow = false; break;
 626         case Bytecodes::_iastore :
 627           type = current_frame.pop_stack(
 628             VerificationType::integer_type(), CHECK_VERIFY(this));
 629           type2 = current_frame.pop_stack(
 630             VerificationType::integer_type(), CHECK_VERIFY(this));
 631           atype = current_frame.pop_stack(
 632             VerificationType::reference_check(), CHECK_VERIFY(this));
 633           if (!atype.is_int_array()) {
 634             verify_error(bci, bad_type_msg, "iastore");
 635             return;
 636           }
 637           no_control_flow = false; break;
 638         case Bytecodes::_bastore :
 639           type = current_frame.pop_stack(
 640             VerificationType::integer_type(), CHECK_VERIFY(this));
 641           type2 = current_frame.pop_stack(
 642             VerificationType::integer_type(), CHECK_VERIFY(this));
 643           atype = current_frame.pop_stack(
 644             VerificationType::reference_check(), CHECK_VERIFY(this));
 645           if (!atype.is_bool_array() && !atype.is_byte_array()) {
 646             verify_error(bci, bad_type_msg, "bastore");
 647             return;
 648           }
 649           no_control_flow = false; break;
 650         case Bytecodes::_castore :
 651           current_frame.pop_stack(
 652             VerificationType::integer_type(), CHECK_VERIFY(this));
 653           current_frame.pop_stack(
 654             VerificationType::integer_type(), CHECK_VERIFY(this));
 655           atype = current_frame.pop_stack(
 656             VerificationType::reference_check(), CHECK_VERIFY(this));
 657           if (!atype.is_char_array()) {
 658             verify_error(bci, bad_type_msg, "castore");
 659             return;
 660           }
 661           no_control_flow = false; break;
 662         case Bytecodes::_sastore :
 663           current_frame.pop_stack(
 664             VerificationType::integer_type(), CHECK_VERIFY(this));
 665           current_frame.pop_stack(
 666             VerificationType::integer_type(), CHECK_VERIFY(this));
 667           atype = current_frame.pop_stack(
 668             VerificationType::reference_check(), CHECK_VERIFY(this));
 669           if (!atype.is_short_array()) {
 670             verify_error(bci, bad_type_msg, "sastore");
 671             return;
 672           }
 673           no_control_flow = false; break;
 674         case Bytecodes::_lastore :
 675           current_frame.pop_stack_2(
 676             VerificationType::long2_type(),
 677             VerificationType::long_type(), CHECK_VERIFY(this));
 678           current_frame.pop_stack(
 679             VerificationType::integer_type(), CHECK_VERIFY(this));
 680           atype = current_frame.pop_stack(
 681             VerificationType::reference_check(), CHECK_VERIFY(this));
 682           if (!atype.is_long_array()) {
 683             verify_error(bci, bad_type_msg, "lastore");
 684             return;
 685           }
 686           no_control_flow = false; break;
 687         case Bytecodes::_fastore :
 688           current_frame.pop_stack(
 689             VerificationType::float_type(), CHECK_VERIFY(this));
 690           current_frame.pop_stack
 691             (VerificationType::integer_type(), CHECK_VERIFY(this));
 692           atype = current_frame.pop_stack(
 693             VerificationType::reference_check(), CHECK_VERIFY(this));
 694           if (!atype.is_float_array()) {
 695             verify_error(bci, bad_type_msg, "fastore");
 696             return;
 697           }
 698           no_control_flow = false; break;
 699         case Bytecodes::_dastore :
 700           current_frame.pop_stack_2(
 701             VerificationType::double2_type(),
 702             VerificationType::double_type(), CHECK_VERIFY(this));
 703           current_frame.pop_stack(
 704             VerificationType::integer_type(), CHECK_VERIFY(this));
 705           atype = current_frame.pop_stack(
 706             VerificationType::reference_check(), CHECK_VERIFY(this));
 707           if (!atype.is_double_array()) {
 708             verify_error(bci, bad_type_msg, "dastore");
 709             return;
 710           }
 711           no_control_flow = false; break;
 712         case Bytecodes::_aastore :
 713           type = current_frame.pop_stack(
 714             VerificationType::reference_check(), CHECK_VERIFY(this));
 715           type2 = current_frame.pop_stack(
 716             VerificationType::integer_type(), CHECK_VERIFY(this));
 717           atype = current_frame.pop_stack(
 718             VerificationType::reference_check(), CHECK_VERIFY(this));
 719           // more type-checking is done at runtime
 720           if (!atype.is_reference_array()) {
 721             verify_error(bci, bad_type_msg, "aastore");
 722             return;
 723           }
 724           // 4938384: relaxed constraint in JVMS 3nd edition.
 725           no_control_flow = false; break;
 726         case Bytecodes::_pop :
 727           current_frame.pop_stack(
 728             VerificationType::category1_check(), CHECK_VERIFY(this));
 729           no_control_flow = false; break;
 730         case Bytecodes::_pop2 :
 731           type = current_frame.pop_stack(CHECK_VERIFY(this));
 732           if (type.is_category1()) {
 733             current_frame.pop_stack(
 734               VerificationType::category1_check(), CHECK_VERIFY(this));
 735           } else if (type.is_category2_2nd()) {
 736             current_frame.pop_stack(
 737               VerificationType::category2_check(), CHECK_VERIFY(this));
 738           } else {
 739             verify_error(bci, bad_type_msg, "pop2");
 740             return;
 741           }
 742           no_control_flow = false; break;
 743         case Bytecodes::_dup :
 744           type = current_frame.pop_stack(
 745             VerificationType::category1_check(), CHECK_VERIFY(this));
 746           current_frame.push_stack(type, CHECK_VERIFY(this));
 747           current_frame.push_stack(type, CHECK_VERIFY(this));
 748           no_control_flow = false; break;
 749         case Bytecodes::_dup_x1 :
 750           type = current_frame.pop_stack(
 751             VerificationType::category1_check(), CHECK_VERIFY(this));
 752           type2 = current_frame.pop_stack(
 753             VerificationType::category1_check(), CHECK_VERIFY(this));
 754           current_frame.push_stack(type, CHECK_VERIFY(this));
 755           current_frame.push_stack(type2, CHECK_VERIFY(this));
 756           current_frame.push_stack(type, CHECK_VERIFY(this));
 757           no_control_flow = false; break;
 758         case Bytecodes::_dup_x2 :
 759         {
 760           VerificationType type3;
 761           type = current_frame.pop_stack(
 762             VerificationType::category1_check(), CHECK_VERIFY(this));
 763           type2 = current_frame.pop_stack(CHECK_VERIFY(this));
 764           if (type2.is_category1()) {
 765             type3 = current_frame.pop_stack(
 766               VerificationType::category1_check(), CHECK_VERIFY(this));
 767           } else if (type2.is_category2_2nd()) {
 768             type3 = current_frame.pop_stack(
 769               VerificationType::category2_check(), CHECK_VERIFY(this));
 770           } else {
 771             verify_error(bci, bad_type_msg, "dup_x2");
 772             return;
 773           }
 774           current_frame.push_stack(type, CHECK_VERIFY(this));
 775           current_frame.push_stack(type3, CHECK_VERIFY(this));
 776           current_frame.push_stack(type2, CHECK_VERIFY(this));
 777           current_frame.push_stack(type, CHECK_VERIFY(this));
 778           no_control_flow = false; break;
 779         }
 780         case Bytecodes::_dup2 :
 781           type = current_frame.pop_stack(CHECK_VERIFY(this));
 782           if (type.is_category1()) {
 783             type2 = current_frame.pop_stack(
 784               VerificationType::category1_check(), CHECK_VERIFY(this));
 785           } else if (type.is_category2_2nd()) {
 786             type2 = current_frame.pop_stack(
 787               VerificationType::category2_check(), CHECK_VERIFY(this));
 788           } else {
 789             verify_error(bci, bad_type_msg, "dup2");
 790             return;
 791           }
 792           current_frame.push_stack(type2, CHECK_VERIFY(this));
 793           current_frame.push_stack(type, CHECK_VERIFY(this));
 794           current_frame.push_stack(type2, CHECK_VERIFY(this));
 795           current_frame.push_stack(type, CHECK_VERIFY(this));
 796           no_control_flow = false; break;
 797         case Bytecodes::_dup2_x1 :
 798         {
 799           VerificationType type3;
 800           type = current_frame.pop_stack(CHECK_VERIFY(this));
 801           if (type.is_category1()) {
 802             type2 = current_frame.pop_stack(
 803               VerificationType::category1_check(), CHECK_VERIFY(this));
 804           } else if(type.is_category2_2nd()) {
 805             type2 = current_frame.pop_stack
 806               (VerificationType::category2_check(), CHECK_VERIFY(this));
 807           } else {
 808             verify_error(bci, bad_type_msg, "dup2_x1");
 809             return;
 810           }
 811           type3 = current_frame.pop_stack(
 812             VerificationType::category1_check(), CHECK_VERIFY(this));
 813           current_frame.push_stack(type2, CHECK_VERIFY(this));
 814           current_frame.push_stack(type, CHECK_VERIFY(this));
 815           current_frame.push_stack(type3, CHECK_VERIFY(this));
 816           current_frame.push_stack(type2, CHECK_VERIFY(this));
 817           current_frame.push_stack(type, CHECK_VERIFY(this));
 818           no_control_flow = false; break;
 819         }
 820         case Bytecodes::_dup2_x2 :
 821         {
 822           VerificationType type3, type4;
 823           type = current_frame.pop_stack(CHECK_VERIFY(this));
 824           if (type.is_category1()) {
 825             type2 = current_frame.pop_stack(
 826               VerificationType::category1_check(), CHECK_VERIFY(this));
 827           } else if (type.is_category2_2nd()) {
 828             type2 = current_frame.pop_stack(
 829               VerificationType::category2_check(), CHECK_VERIFY(this));
 830           } else {
 831             verify_error(bci, bad_type_msg, "dup2_x2");
 832             return;
 833           }
 834           type3 = current_frame.pop_stack(CHECK_VERIFY(this));
 835           if (type3.is_category1()) {
 836             type4 = current_frame.pop_stack(
 837               VerificationType::category1_check(), CHECK_VERIFY(this));
 838           } else if (type3.is_category2_2nd()) {
 839             type4 = current_frame.pop_stack(
 840               VerificationType::category2_check(), CHECK_VERIFY(this));
 841           } else {
 842             verify_error(bci, bad_type_msg, "dup2_x2");
 843             return;
 844           }
 845           current_frame.push_stack(type2, CHECK_VERIFY(this));
 846           current_frame.push_stack(type, CHECK_VERIFY(this));
 847           current_frame.push_stack(type4, CHECK_VERIFY(this));
 848           current_frame.push_stack(type3, CHECK_VERIFY(this));
 849           current_frame.push_stack(type2, CHECK_VERIFY(this));
 850           current_frame.push_stack(type, CHECK_VERIFY(this));
 851           no_control_flow = false; break;
 852         }
 853         case Bytecodes::_swap :
 854           type = current_frame.pop_stack(
 855             VerificationType::category1_check(), CHECK_VERIFY(this));
 856           type2 = current_frame.pop_stack(
 857             VerificationType::category1_check(), CHECK_VERIFY(this));
 858           current_frame.push_stack(type, CHECK_VERIFY(this));
 859           current_frame.push_stack(type2, CHECK_VERIFY(this));
 860           no_control_flow = false; break;
 861         case Bytecodes::_iadd :
 862         case Bytecodes::_isub :
 863         case Bytecodes::_imul :
 864         case Bytecodes::_idiv :
 865         case Bytecodes::_irem :
 866         case Bytecodes::_ishl :
 867         case Bytecodes::_ishr :
 868         case Bytecodes::_iushr :
 869         case Bytecodes::_ior :
 870         case Bytecodes::_ixor :
 871         case Bytecodes::_iand :
 872           current_frame.pop_stack(
 873             VerificationType::integer_type(), CHECK_VERIFY(this));
 874           // fall through
 875         case Bytecodes::_ineg :
 876           current_frame.pop_stack(
 877             VerificationType::integer_type(), CHECK_VERIFY(this));
 878           current_frame.push_stack(
 879             VerificationType::integer_type(), CHECK_VERIFY(this));
 880           no_control_flow = false; break;
 881         case Bytecodes::_ladd :
 882         case Bytecodes::_lsub :
 883         case Bytecodes::_lmul :
 884         case Bytecodes::_ldiv :
 885         case Bytecodes::_lrem :
 886         case Bytecodes::_land :
 887         case Bytecodes::_lor :
 888         case Bytecodes::_lxor :
 889           current_frame.pop_stack_2(
 890             VerificationType::long2_type(),
 891             VerificationType::long_type(), CHECK_VERIFY(this));
 892           // fall through
 893         case Bytecodes::_lneg :
 894           current_frame.pop_stack_2(
 895             VerificationType::long2_type(),
 896             VerificationType::long_type(), CHECK_VERIFY(this));
 897           current_frame.push_stack_2(
 898             VerificationType::long_type(),
 899             VerificationType::long2_type(), CHECK_VERIFY(this));
 900           no_control_flow = false; break;
 901         case Bytecodes::_lshl :
 902         case Bytecodes::_lshr :
 903         case Bytecodes::_lushr :
 904           current_frame.pop_stack(
 905             VerificationType::integer_type(), CHECK_VERIFY(this));
 906           current_frame.pop_stack_2(
 907             VerificationType::long2_type(),
 908             VerificationType::long_type(), CHECK_VERIFY(this));
 909           current_frame.push_stack_2(
 910             VerificationType::long_type(),
 911             VerificationType::long2_type(), CHECK_VERIFY(this));
 912           no_control_flow = false; break;
 913         case Bytecodes::_fadd :
 914         case Bytecodes::_fsub :
 915         case Bytecodes::_fmul :
 916         case Bytecodes::_fdiv :
 917         case Bytecodes::_frem :
 918           current_frame.pop_stack(
 919             VerificationType::float_type(), CHECK_VERIFY(this));
 920           // fall through
 921         case Bytecodes::_fneg :
 922           current_frame.pop_stack(
 923             VerificationType::float_type(), CHECK_VERIFY(this));
 924           current_frame.push_stack(
 925             VerificationType::float_type(), CHECK_VERIFY(this));
 926           no_control_flow = false; break;
 927         case Bytecodes::_dadd :
 928         case Bytecodes::_dsub :
 929         case Bytecodes::_dmul :
 930         case Bytecodes::_ddiv :
 931         case Bytecodes::_drem :
 932           current_frame.pop_stack_2(
 933             VerificationType::double2_type(),
 934             VerificationType::double_type(), CHECK_VERIFY(this));
 935           // fall through
 936         case Bytecodes::_dneg :
 937           current_frame.pop_stack_2(
 938             VerificationType::double2_type(),
 939             VerificationType::double_type(), CHECK_VERIFY(this));
 940           current_frame.push_stack_2(
 941             VerificationType::double_type(),
 942             VerificationType::double2_type(), CHECK_VERIFY(this));
 943           no_control_flow = false; break;
 944         case Bytecodes::_iinc :
 945           verify_iinc(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
 946           no_control_flow = false; break;
 947         case Bytecodes::_i2l :
 948           type = current_frame.pop_stack(
 949             VerificationType::integer_type(), CHECK_VERIFY(this));
 950           current_frame.push_stack_2(
 951             VerificationType::long_type(),
 952             VerificationType::long2_type(), CHECK_VERIFY(this));
 953           no_control_flow = false; break;
 954        case Bytecodes::_l2i :
 955           current_frame.pop_stack_2(
 956             VerificationType::long2_type(),
 957             VerificationType::long_type(), CHECK_VERIFY(this));
 958           current_frame.push_stack(
 959             VerificationType::integer_type(), CHECK_VERIFY(this));
 960           no_control_flow = false; break;
 961         case Bytecodes::_i2f :
 962           current_frame.pop_stack(
 963             VerificationType::integer_type(), CHECK_VERIFY(this));
 964           current_frame.push_stack(
 965             VerificationType::float_type(), CHECK_VERIFY(this));
 966           no_control_flow = false; break;
 967         case Bytecodes::_i2d :
 968           current_frame.pop_stack(
 969             VerificationType::integer_type(), CHECK_VERIFY(this));
 970           current_frame.push_stack_2(
 971             VerificationType::double_type(),
 972             VerificationType::double2_type(), CHECK_VERIFY(this));
 973           no_control_flow = false; break;
 974         case Bytecodes::_l2f :
 975           current_frame.pop_stack_2(
 976             VerificationType::long2_type(),
 977             VerificationType::long_type(), CHECK_VERIFY(this));
 978           current_frame.push_stack(
 979             VerificationType::float_type(), CHECK_VERIFY(this));
 980           no_control_flow = false; break;
 981         case Bytecodes::_l2d :
 982           current_frame.pop_stack_2(
 983             VerificationType::long2_type(),
 984             VerificationType::long_type(), CHECK_VERIFY(this));
 985           current_frame.push_stack_2(
 986             VerificationType::double_type(),
 987             VerificationType::double2_type(), CHECK_VERIFY(this));
 988           no_control_flow = false; break;
 989         case Bytecodes::_f2i :
 990           current_frame.pop_stack(
 991             VerificationType::float_type(), CHECK_VERIFY(this));
 992           current_frame.push_stack(
 993             VerificationType::integer_type(), CHECK_VERIFY(this));
 994           no_control_flow = false; break;
 995         case Bytecodes::_f2l :
 996           current_frame.pop_stack(
 997             VerificationType::float_type(), CHECK_VERIFY(this));
 998           current_frame.push_stack_2(
 999             VerificationType::long_type(),
1000             VerificationType::long2_type(), CHECK_VERIFY(this));
1001           no_control_flow = false; break;
1002         case Bytecodes::_f2d :
1003           current_frame.pop_stack(
1004             VerificationType::float_type(), CHECK_VERIFY(this));
1005           current_frame.push_stack_2(
1006             VerificationType::double_type(),
1007             VerificationType::double2_type(), CHECK_VERIFY(this));
1008           no_control_flow = false; break;
1009         case Bytecodes::_d2i :
1010           current_frame.pop_stack_2(
1011             VerificationType::double2_type(),
1012             VerificationType::double_type(), CHECK_VERIFY(this));
1013           current_frame.push_stack(
1014             VerificationType::integer_type(), CHECK_VERIFY(this));
1015           no_control_flow = false; break;
1016         case Bytecodes::_d2l :
1017           current_frame.pop_stack_2(
1018             VerificationType::double2_type(),
1019             VerificationType::double_type(), CHECK_VERIFY(this));
1020           current_frame.push_stack_2(
1021             VerificationType::long_type(),
1022             VerificationType::long2_type(), CHECK_VERIFY(this));
1023           no_control_flow = false; break;
1024         case Bytecodes::_d2f :
1025           current_frame.pop_stack_2(
1026             VerificationType::double2_type(),
1027             VerificationType::double_type(), CHECK_VERIFY(this));
1028           current_frame.push_stack(
1029             VerificationType::float_type(), CHECK_VERIFY(this));
1030           no_control_flow = false; break;
1031         case Bytecodes::_i2b :
1032         case Bytecodes::_i2c :
1033         case Bytecodes::_i2s :
1034           current_frame.pop_stack(
1035             VerificationType::integer_type(), CHECK_VERIFY(this));
1036           current_frame.push_stack(
1037             VerificationType::integer_type(), CHECK_VERIFY(this));
1038           no_control_flow = false; break;
1039         case Bytecodes::_lcmp :
1040           current_frame.pop_stack_2(
1041             VerificationType::long2_type(),
1042             VerificationType::long_type(), CHECK_VERIFY(this));
1043           current_frame.pop_stack_2(
1044             VerificationType::long2_type(),
1045             VerificationType::long_type(), CHECK_VERIFY(this));
1046           current_frame.push_stack(
1047             VerificationType::integer_type(), CHECK_VERIFY(this));
1048           no_control_flow = false; break;
1049         case Bytecodes::_fcmpl :
1050         case Bytecodes::_fcmpg :
1051           current_frame.pop_stack(
1052             VerificationType::float_type(), CHECK_VERIFY(this));
1053           current_frame.pop_stack(
1054             VerificationType::float_type(), CHECK_VERIFY(this));
1055           current_frame.push_stack(
1056             VerificationType::integer_type(), CHECK_VERIFY(this));
1057           no_control_flow = false; break;
1058         case Bytecodes::_dcmpl :
1059         case Bytecodes::_dcmpg :
1060           current_frame.pop_stack_2(
1061             VerificationType::double2_type(),
1062             VerificationType::double_type(), CHECK_VERIFY(this));
1063           current_frame.pop_stack_2(
1064             VerificationType::double2_type(),
1065             VerificationType::double_type(), CHECK_VERIFY(this));
1066           current_frame.push_stack(
1067             VerificationType::integer_type(), CHECK_VERIFY(this));
1068           no_control_flow = false; break;
1069         case Bytecodes::_if_icmpeq:
1070         case Bytecodes::_if_icmpne:
1071         case Bytecodes::_if_icmplt:
1072         case Bytecodes::_if_icmpge:
1073         case Bytecodes::_if_icmpgt:
1074         case Bytecodes::_if_icmple:
1075           current_frame.pop_stack(
1076             VerificationType::integer_type(), CHECK_VERIFY(this));
1077           // fall through
1078         case Bytecodes::_ifeq:
1079         case Bytecodes::_ifne:
1080         case Bytecodes::_iflt:
1081         case Bytecodes::_ifge:
1082         case Bytecodes::_ifgt:
1083         case Bytecodes::_ifle:
1084           current_frame.pop_stack(
1085             VerificationType::integer_type(), CHECK_VERIFY(this));
1086           target = bcs.dest();
1087           stackmap_table.check_jump_target(
1088             &current_frame, target, CHECK_VERIFY(this));
1089           no_control_flow = false; break;
1090         case Bytecodes::_if_acmpeq :
1091         case Bytecodes::_if_acmpne :
1092           current_frame.pop_stack(
1093             VerificationType::reference_check(), CHECK_VERIFY(this));
1094           // fall through
1095         case Bytecodes::_ifnull :
1096         case Bytecodes::_ifnonnull :
1097           current_frame.pop_stack(
1098             VerificationType::reference_check(), CHECK_VERIFY(this));
1099           target = bcs.dest();
1100           stackmap_table.check_jump_target
1101             (&current_frame, target, CHECK_VERIFY(this));
1102           no_control_flow = false; break;
1103         case Bytecodes::_goto :
1104           target = bcs.dest();
1105           stackmap_table.check_jump_target(
1106             &current_frame, target, CHECK_VERIFY(this));
1107           no_control_flow = true; break;
1108         case Bytecodes::_goto_w :
1109           target = bcs.dest_w();
1110           stackmap_table.check_jump_target(
1111             &current_frame, target, CHECK_VERIFY(this));
1112           no_control_flow = true; break;
1113         case Bytecodes::_tableswitch :
1114         case Bytecodes::_lookupswitch :
1115           verify_switch(
1116             &bcs, code_length, code_data, &current_frame,
1117             &stackmap_table, CHECK_VERIFY(this));
1118           no_control_flow = true; break;
1119         case Bytecodes::_ireturn :
1120           type = current_frame.pop_stack(
1121             VerificationType::integer_type(), CHECK_VERIFY(this));
1122           verify_return_value(return_type, type, bci, CHECK_VERIFY(this));
1123           no_control_flow = true; break;
1124         case Bytecodes::_lreturn :
1125           type2 = current_frame.pop_stack(
1126             VerificationType::long2_type(), CHECK_VERIFY(this));
1127           type = current_frame.pop_stack(
1128             VerificationType::long_type(), CHECK_VERIFY(this));
1129           verify_return_value(return_type, type, bci, CHECK_VERIFY(this));
1130           no_control_flow = true; break;
1131         case Bytecodes::_freturn :
1132           type = current_frame.pop_stack(
1133             VerificationType::float_type(), CHECK_VERIFY(this));
1134           verify_return_value(return_type, type, bci, CHECK_VERIFY(this));
1135           no_control_flow = true; break;
1136         case Bytecodes::_dreturn :
1137           type2 = current_frame.pop_stack(
1138             VerificationType::double2_type(),  CHECK_VERIFY(this));
1139           type = current_frame.pop_stack(
1140             VerificationType::double_type(), CHECK_VERIFY(this));
1141           verify_return_value(return_type, type, bci, CHECK_VERIFY(this));
1142           no_control_flow = true; break;
1143         case Bytecodes::_areturn :
1144           type = current_frame.pop_stack(
1145             VerificationType::reference_check(), CHECK_VERIFY(this));
1146           verify_return_value(return_type, type, bci, CHECK_VERIFY(this));
1147           no_control_flow = true; break;
1148         case Bytecodes::_return :
1149           if (return_type != VerificationType::bogus_type()) {
1150             verify_error(bci, "Method expects no return value");
1151             return;
1152           }
1153           // Make sure "this" has been initialized if current method is an
1154           // <init>
1155           if (_method->name() == vmSymbols::object_initializer_name() &&
1156               current_frame.flag_this_uninit()) {
1157             verify_error(bci,
1158               "Constructor must call super() or this() before return");
1159             return;
1160           }
1161           no_control_flow = true; break;
1162         case Bytecodes::_getstatic :
1163         case Bytecodes::_putstatic :
1164         case Bytecodes::_getfield :
1165         case Bytecodes::_putfield :
1166           verify_field_instructions(
1167             &bcs, &current_frame, cp, CHECK_VERIFY(this));
1168           no_control_flow = false; break;
1169         case Bytecodes::_invokevirtual :
1170         case Bytecodes::_invokespecial :
1171         case Bytecodes::_invokestatic :
1172           verify_invoke_instructions(
1173             &bcs, code_length, &current_frame,
1174             &this_uninit, return_type, cp, CHECK_VERIFY(this));
1175           no_control_flow = false; break;
1176         case Bytecodes::_invokeinterface :
1177           verify_invoke_instructions(
1178             &bcs, code_length, &current_frame,
1179             &this_uninit, return_type, cp, CHECK_VERIFY(this));
1180           no_control_flow = false; break;
1181         case Bytecodes::_new :
1182         {
1183           index = bcs.get_index_big();
1184           verify_cp_class_type(index, cp, CHECK_VERIFY(this));
1185           VerificationType new_class_type =
1186             cp_index_to_type(index, cp, CHECK_VERIFY(this));
1187           if (!new_class_type.is_object()) {
1188             verify_error(bci, "Illegal new instruction");
1189             return;
1190           }
1191           type = VerificationType::uninitialized_type(bci);
1192           current_frame.push_stack(type, CHECK_VERIFY(this));
1193           no_control_flow = false; break;
1194         }
1195         case Bytecodes::_newarray :
1196           type = get_newarray_type(bcs.get_index(), bci, CHECK_VERIFY(this));
1197           current_frame.pop_stack(
1198             VerificationType::integer_type(),  CHECK_VERIFY(this));
1199           current_frame.push_stack(type, CHECK_VERIFY(this));
1200           no_control_flow = false; break;
1201         case Bytecodes::_anewarray :
1202           verify_anewarray(
1203             bcs.get_index_big(), cp, &current_frame, CHECK_VERIFY(this));
1204           no_control_flow = false; break;
1205         case Bytecodes::_arraylength :
1206           type = current_frame.pop_stack(
1207             VerificationType::reference_check(), CHECK_VERIFY(this));
1208           if (!(type.is_null() || type.is_array())) {
1209             verify_error(bci, bad_type_msg, "arraylength");
1210           }
1211           current_frame.push_stack(
1212             VerificationType::integer_type(), CHECK_VERIFY(this));
1213           no_control_flow = false; break;
1214         case Bytecodes::_checkcast :
1215         {
1216           index = bcs.get_index_big();
1217           verify_cp_class_type(index, cp, CHECK_VERIFY(this));
1218           current_frame.pop_stack(
1219             VerificationType::reference_check(), CHECK_VERIFY(this));
1220           VerificationType klass_type = cp_index_to_type(
1221             index, cp, CHECK_VERIFY(this));
1222           current_frame.push_stack(klass_type, CHECK_VERIFY(this));
1223           no_control_flow = false; break;
1224         }
1225         case Bytecodes::_instanceof : {
1226           index = bcs.get_index_big();
1227           verify_cp_class_type(index, cp, CHECK_VERIFY(this));
1228           current_frame.pop_stack(
1229             VerificationType::reference_check(), CHECK_VERIFY(this));
1230           current_frame.push_stack(
1231             VerificationType::integer_type(), CHECK_VERIFY(this));
1232           no_control_flow = false; break;
1233         }
1234         case Bytecodes::_monitorenter :
1235         case Bytecodes::_monitorexit :
1236           current_frame.pop_stack(
1237             VerificationType::reference_check(), CHECK_VERIFY(this));
1238           no_control_flow = false; break;
1239         case Bytecodes::_multianewarray :
1240         {
1241           index = bcs.get_index_big();
1242           u2 dim = *(bcs.bcp()+3);
1243           verify_cp_class_type(index, cp, CHECK_VERIFY(this));
1244           VerificationType new_array_type =
1245             cp_index_to_type(index, cp, CHECK_VERIFY(this));
1246           if (!new_array_type.is_array()) {
1247             verify_error(bci,
1248               "Illegal constant pool index in multianewarray instruction");
1249             return;
1250           }
1251           if (dim < 1 || new_array_type.dimensions() < dim) {
1252             verify_error(bci,
1253               "Illegal dimension in multianewarray instruction");
1254             return;
1255           }
1256           for (int i = 0; i < dim; i++) {
1257             current_frame.pop_stack(
1258               VerificationType::integer_type(), CHECK_VERIFY(this));
1259           }
1260           current_frame.push_stack(new_array_type, CHECK_VERIFY(this));
1261           no_control_flow = false; break;
1262         }
1263         case Bytecodes::_athrow :
1264           type = VerificationType::reference_type(
1265             vmSymbols::java_lang_Throwable());
1266           current_frame.pop_stack(type, CHECK_VERIFY(this));
1267           no_control_flow = true; break;
1268         default:
1269           // We only need to check the valid bytecodes in class file.
1270           // And jsr and ret are not in the new class file format in JDK1.5.
1271           verify_error(bci, "Bad instruction");
1272           no_control_flow = false;
1273           return;
1274       }  // end switch
1275     }  // end Merge with the next instruction
1276 
1277     // Look for possible jump target in exception handlers and see if it
1278     // matches current_frame
1279     if (bci >= ex_min && bci < ex_max) {
1280       verify_exception_handler_targets(
1281         bci, this_uninit, &current_frame, &stackmap_table, CHECK_VERIFY(this));
1282     }
1283   } // end while
1284 
1285   // Make sure that control flow does not fall through end of the method
1286   if (!no_control_flow) {
1287     verify_error(code_length, "Control flow falls through code end");
1288     return;
1289   }
1290 }
1291 
1292 char* ClassVerifier::generate_code_data(methodHandle m, u4 code_length, TRAPS) {
1293   char* code_data = NEW_RESOURCE_ARRAY(char, code_length);
1294   memset(code_data, 0, sizeof(char) * code_length);
1295   RawBytecodeStream bcs(m);
1296 
1297   while (!bcs.is_last_bytecode()) {
1298     if (bcs.raw_next() != Bytecodes::_illegal) {
1299       int bci = bcs.bci();
1300       if (bcs.code() == Bytecodes::_new) {
1301         code_data[bci] = NEW_OFFSET;
1302       } else {
1303         code_data[bci] = BYTECODE_OFFSET;
1304       }
1305     } else {
1306       verify_error(bcs.bci(), "Bad instruction");
1307       return NULL;
1308     }
1309   }
1310 
1311   return code_data;
1312 }
1313 
1314 void ClassVerifier::verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS) {
1315   typeArrayHandle exhandlers (THREAD, _method->exception_table());
1316   constantPoolHandle cp (THREAD, _method->constants());
1317 
1318   if (exhandlers() != NULL) {
1319     for(int i = 0; i < exhandlers->length();) {
1320       u2 start_pc = exhandlers->int_at(i++);
1321       u2 end_pc = exhandlers->int_at(i++);
1322       u2 handler_pc = exhandlers->int_at(i++);
1323       if (start_pc >= code_length || code_data[start_pc] == 0) {
1324         class_format_error("Illegal exception table start_pc %d", start_pc);
1325         return;
1326       }
1327       if (end_pc != code_length) {   // special case: end_pc == code_length
1328         if (end_pc > code_length || code_data[end_pc] == 0) {
1329           class_format_error("Illegal exception table end_pc %d", end_pc);
1330           return;
1331         }
1332       }
1333       if (handler_pc >= code_length || code_data[handler_pc] == 0) {
1334         class_format_error("Illegal exception table handler_pc %d", handler_pc);
1335         return;
1336       }
1337       int catch_type_index = exhandlers->int_at(i++);
1338       if (catch_type_index != 0) {
1339         VerificationType catch_type = cp_index_to_type(
1340           catch_type_index, cp, CHECK_VERIFY(this));
1341         VerificationType throwable =
1342           VerificationType::reference_type(vmSymbols::java_lang_Throwable());
1343         bool is_subclass = throwable.is_assignable_from(
1344           catch_type, current_class(), CHECK_VERIFY(this));
1345         if (!is_subclass) {
1346           // 4286534: should throw VerifyError according to recent spec change
1347           verify_error(
1348             "Catch type is not a subclass of Throwable in handler %d",
1349             handler_pc);
1350           return;
1351         }
1352       }
1353       if (start_pc < min) min = start_pc;
1354       if (end_pc > max) max = end_pc;
1355     }
1356   }
1357 }
1358 
1359 void ClassVerifier::verify_local_variable_table(u4 code_length, char* code_data, TRAPS) {
1360   int localvariable_table_length = _method()->localvariable_table_length();
1361   if (localvariable_table_length > 0) {
1362     LocalVariableTableElement* table = _method()->localvariable_table_start();
1363     for (int i = 0; i < localvariable_table_length; i++) {
1364       u2 start_bci = table[i].start_bci;
1365       u2 length = table[i].length;
1366 
1367       if (start_bci >= code_length || code_data[start_bci] == 0) {
1368         class_format_error(
1369           "Illegal local variable table start_pc %d", start_bci);
1370         return;
1371       }
1372       u4 end_bci = (u4)(start_bci + length);
1373       if (end_bci != code_length) {
1374         if (end_bci >= code_length || code_data[end_bci] == 0) {
1375           class_format_error( "Illegal local variable table length %d", length);
1376           return;
1377         }
1378       }
1379     }
1380   }
1381 }
1382 
1383 u2 ClassVerifier::verify_stackmap_table(u2 stackmap_index, u2 bci,
1384                                         StackMapFrame* current_frame,
1385                                         StackMapTable* stackmap_table,
1386                                         bool no_control_flow, TRAPS) {
1387   if (stackmap_index < stackmap_table->get_frame_count()) {
1388     u2 this_offset = stackmap_table->get_offset(stackmap_index);
1389     if (no_control_flow && this_offset > bci) {
1390       verify_error(bci, "Expecting a stack map frame");
1391       return 0;
1392     }
1393     if (this_offset == bci) {
1394       // See if current stack map can be assigned to the frame in table.
1395       // current_frame is the stackmap frame got from the last instruction.
1396       // If matched, current_frame will be updated by this method.
1397       bool match = stackmap_table->match_stackmap(
1398         current_frame, this_offset, stackmap_index,
1399         !no_control_flow, true, CHECK_VERIFY_(this, 0));
1400       if (!match) {
1401         // report type error
1402         verify_error(bci, "Instruction type does not match stack map");
1403         return 0;
1404       }
1405       stackmap_index++;
1406     } else if (this_offset < bci) {
1407       // current_offset should have met this_offset.
1408       class_format_error("Bad stack map offset %d", this_offset);
1409       return 0;
1410     }
1411   } else if (no_control_flow) {
1412     verify_error(bci, "Expecting a stack map frame");
1413     return 0;
1414   }
1415   return stackmap_index;
1416 }
1417 
1418 void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, StackMapFrame* current_frame,
1419                                                      StackMapTable* stackmap_table, TRAPS) {
1420   constantPoolHandle cp (THREAD, _method->constants());
1421   typeArrayHandle exhandlers (THREAD, _method->exception_table());
1422   if (exhandlers() != NULL) {
1423     for(int i = 0; i < exhandlers->length();) {
1424       u2 start_pc = exhandlers->int_at(i++);
1425       u2 end_pc = exhandlers->int_at(i++);
1426       u2 handler_pc = exhandlers->int_at(i++);
1427       int catch_type_index = exhandlers->int_at(i++);
1428       if(bci >= start_pc && bci < end_pc) {
1429         u1 flags = current_frame->flags();
1430         if (this_uninit) {  flags |= FLAG_THIS_UNINIT; }
1431 
1432         ResourceMark rm(THREAD);
1433         StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags);
1434         if (catch_type_index != 0) {
1435           // We know that this index refers to a subclass of Throwable
1436           VerificationType catch_type = cp_index_to_type(
1437             catch_type_index, cp, CHECK_VERIFY(this));
1438           new_frame->push_stack(catch_type, CHECK_VERIFY(this));
1439         } else {
1440           VerificationType throwable =
1441             VerificationType::reference_type(vmSymbols::java_lang_Throwable());
1442           new_frame->push_stack(throwable, CHECK_VERIFY(this));
1443         }
1444         bool match = stackmap_table->match_stackmap(
1445           new_frame, handler_pc, true, false, CHECK_VERIFY(this));
1446         if (!match) {
1447           verify_error(bci,
1448             "Stack map does not match the one at exception handler %d",
1449             handler_pc);
1450           return;
1451         }
1452       }
1453     }
1454   }
1455 }
1456 
1457 void ClassVerifier::verify_cp_index(constantPoolHandle cp, int index, TRAPS) {
1458   int nconstants = cp->length();
1459   if ((index <= 0) || (index >= nconstants)) {
1460     verify_error("Illegal constant pool index %d in class %s",
1461       index, instanceKlass::cast(cp->pool_holder())->external_name());
1462     return;
1463   }
1464 }
1465 
1466 void ClassVerifier::verify_cp_type(
1467     int index, constantPoolHandle cp, unsigned int types, TRAPS) {
1468 
1469   // In some situations, bytecode rewriting may occur while we're verifying.
1470   // In this case, a constant pool cache exists and some indices refer to that
1471   // instead.  Get the original index for the tag check
1472   constantPoolCacheOop cache = cp->cache();
1473   if (cache != NULL &&
1474        ((types == (1 <<  JVM_CONSTANT_InterfaceMethodref)) ||
1475         (types == (1 <<  JVM_CONSTANT_Methodref)) ||
1476         (types == (1 <<  JVM_CONSTANT_Fieldref)))) {
1477     int native_index = index;
1478     if (Bytes::is_Java_byte_ordering_different()) {
1479       native_index = Bytes::swap_u2(index);
1480     }
1481     assert((native_index >= 0) && (native_index < cache->length()),
1482       "Must be a legal index into the cp cache");
1483     index = cache->entry_at(native_index)->constant_pool_index();
1484   }
1485 
1486   verify_cp_index(cp, index, CHECK_VERIFY(this));
1487   unsigned int tag = cp->tag_at(index).value();
1488   if ((types & (1 << tag)) == 0) {
1489     verify_error(
1490       "Illegal type at constant pool entry %d in class %s",
1491       index, instanceKlass::cast(cp->pool_holder())->external_name());
1492     return;
1493   }
1494 }
1495 
1496 void ClassVerifier::verify_cp_class_type(
1497     int index, constantPoolHandle cp, TRAPS) {
1498   verify_cp_index(cp, index, CHECK_VERIFY(this));
1499   constantTag tag = cp->tag_at(index);
1500   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
1501     verify_error("Illegal type at constant pool entry %d in class %s",
1502       index, instanceKlass::cast(cp->pool_holder())->external_name());
1503     return;
1504   }
1505 }
1506 
1507 void ClassVerifier::format_error_message(
1508     const char* fmt, int offset, va_list va) {
1509   ResourceMark rm(_thread);
1510   stringStream message(_message, _message_buffer_len);
1511   message.vprint(fmt, va);
1512   if (!_method.is_null()) {
1513     message.print(" in method %s", _method->name_and_sig_as_C_string());
1514   }
1515   if (offset != -1) {
1516     message.print(" at offset %d", offset);
1517   }
1518 }
1519 
1520 void ClassVerifier::verify_error(u2 offset, const char* fmt, ...) {
1521   _exception_type = vmSymbols::java_lang_VerifyError();
1522   va_list va;
1523   va_start(va, fmt);
1524   format_error_message(fmt, offset, va);
1525   va_end(va);
1526 }
1527 
1528 void ClassVerifier::verify_error(const char* fmt, ...) {
1529   _exception_type = vmSymbols::java_lang_VerifyError();
1530   va_list va;
1531   va_start(va, fmt);
1532   format_error_message(fmt, -1, va);
1533   va_end(va);
1534 }
1535 
1536 void ClassVerifier::class_format_error(const char* msg, ...) {
1537   _exception_type = vmSymbols::java_lang_ClassFormatError();
1538   va_list va;
1539   va_start(va, msg);
1540   format_error_message(msg, -1, va);
1541   va_end(va);
1542 }
1543 
1544 klassOop ClassVerifier::load_class(symbolHandle name, TRAPS) {
1545   // Get current loader and protection domain first.
1546   oop loader = current_class()->class_loader();
1547   oop protection_domain = current_class()->protection_domain();
1548 
1549   return SystemDictionary::resolve_or_fail(
1550     name, Handle(THREAD, loader), Handle(THREAD, protection_domain),
1551     true, CHECK_NULL);
1552 }
1553 
1554 bool ClassVerifier::is_protected_access(instanceKlassHandle this_class,
1555                                         klassOop target_class,
1556                                         symbolOop field_name,
1557                                         symbolOop field_sig,
1558                                         bool is_method) {
1559   No_Safepoint_Verifier nosafepoint;
1560 
1561   // If target class isn't a super class of this class, we don't worry about this case
1562   if (!this_class->is_subclass_of(target_class)) {
1563     return false;
1564   }
1565   // Check if the specified method or field is protected
1566   instanceKlass* target_instance = instanceKlass::cast(target_class);
1567   fieldDescriptor fd;
1568   if (is_method) {
1569     methodOop m = target_instance->uncached_lookup_method(field_name, field_sig);
1570     if (m != NULL && m->is_protected()) {
1571       if (!this_class->is_same_class_package(m->method_holder())) {
1572         return true;
1573       }
1574     }
1575   } else {
1576     klassOop member_klass = target_instance->find_field(field_name, field_sig, &fd);
1577     if(member_klass != NULL && fd.is_protected()) {
1578       if (!this_class->is_same_class_package(member_klass)) {
1579         return true;
1580       }
1581     }
1582   }
1583   return false;
1584 }
1585 
1586 void ClassVerifier::verify_ldc(
1587     int opcode, u2 index, StackMapFrame *current_frame,
1588      constantPoolHandle cp, u2 bci, TRAPS) {
1589   verify_cp_index(cp, index, CHECK_VERIFY(this));
1590   constantTag tag = cp->tag_at(index);
1591   unsigned int types;
1592   if (opcode == Bytecodes::_ldc || opcode == Bytecodes::_ldc_w) {
1593     if (!tag.is_unresolved_string() && !tag.is_unresolved_klass()) {
1594       types = (1 << JVM_CONSTANT_Integer) | (1 << JVM_CONSTANT_Float)
1595             | (1 << JVM_CONSTANT_String)  | (1 << JVM_CONSTANT_Class);
1596       verify_cp_type(index, cp, types, CHECK_VERIFY(this));
1597     }
1598   } else {
1599     assert(opcode == Bytecodes::_ldc2_w, "must be ldc2_w");
1600     types = (1 << JVM_CONSTANT_Double) | (1 << JVM_CONSTANT_Long);
1601     verify_cp_type(index, cp, types, CHECK_VERIFY(this));
1602   }
1603   if (tag.is_string() && cp->is_pseudo_string_at(index)) {
1604     current_frame->push_stack(
1605       VerificationType::reference_type(
1606         vmSymbols::java_lang_Object()), CHECK_VERIFY(this));
1607   } else if (tag.is_string() || tag.is_unresolved_string()) {
1608     current_frame->push_stack(
1609       VerificationType::reference_type(
1610         vmSymbols::java_lang_String()), CHECK_VERIFY(this));
1611   } else if (tag.is_klass() || tag.is_unresolved_klass()) {
1612     current_frame->push_stack(
1613       VerificationType::reference_type(
1614         vmSymbols::java_lang_Class()), CHECK_VERIFY(this));
1615   } else if (tag.is_int()) {
1616     current_frame->push_stack(
1617       VerificationType::integer_type(), CHECK_VERIFY(this));
1618   } else if (tag.is_float()) {
1619     current_frame->push_stack(
1620       VerificationType::float_type(), CHECK_VERIFY(this));
1621   } else if (tag.is_double()) {
1622     current_frame->push_stack_2(
1623       VerificationType::double_type(),
1624       VerificationType::double2_type(), CHECK_VERIFY(this));
1625   } else if (tag.is_long()) {
1626     current_frame->push_stack_2(
1627       VerificationType::long_type(),
1628       VerificationType::long2_type(), CHECK_VERIFY(this));
1629   } else {
1630     verify_error(bci, "Invalid index in ldc");
1631     return;
1632   }
1633 }
1634 
1635 void ClassVerifier::verify_switch(
1636     RawBytecodeStream* bcs, u4 code_length, char* code_data,
1637     StackMapFrame* current_frame, StackMapTable* stackmap_table, TRAPS) {
1638   int bci = bcs->bci();
1639   address bcp = bcs->bcp();
1640   address aligned_bcp = (address) round_to((intptr_t)(bcp + 1), jintSize);
1641 
1642   // 4639449 & 4647081: padding bytes must be 0
1643   u2 padding_offset = 1;
1644   while ((bcp + padding_offset) < aligned_bcp) {
1645     if(*(bcp + padding_offset) != 0) {
1646       verify_error(bci, "Nonzero padding byte in lookswitch or tableswitch");
1647       return;
1648     }
1649     padding_offset++;
1650   }
1651   int default_offset = (int) Bytes::get_Java_u4(aligned_bcp);
1652   int keys, delta;
1653   current_frame->pop_stack(
1654     VerificationType::integer_type(), CHECK_VERIFY(this));
1655   if (bcs->code() == Bytecodes::_tableswitch) {
1656     jint low = (jint)Bytes::get_Java_u4(aligned_bcp + jintSize);
1657     jint high = (jint)Bytes::get_Java_u4(aligned_bcp + 2*jintSize);
1658     if (low > high) {
1659       verify_error(bci,
1660         "low must be less than or equal to high in tableswitch");
1661       return;
1662     }
1663     keys = high - low + 1;
1664     if (keys < 0) {
1665       verify_error(bci, "too many keys in tableswitch");
1666       return;
1667     }
1668     delta = 1;
1669   } else {
1670     keys = (int)Bytes::get_Java_u4(aligned_bcp + jintSize);
1671     if (keys < 0) {
1672       verify_error(bci, "number of keys in lookupswitch less than 0");
1673       return;
1674     }
1675     delta = 2;
1676     // Make sure that the lookupswitch items are sorted
1677     for (int i = 0; i < (keys - 1); i++) {
1678       jint this_key = Bytes::get_Java_u4(aligned_bcp + (2+2*i)*jintSize);
1679       jint next_key = Bytes::get_Java_u4(aligned_bcp + (2+2*i+2)*jintSize);
1680       if (this_key >= next_key) {
1681         verify_error(bci, "Bad lookupswitch instruction");
1682         return;
1683       }
1684     }
1685   }
1686   int target = bci + default_offset;
1687   stackmap_table->check_jump_target(current_frame, target, CHECK_VERIFY(this));
1688   for (int i = 0; i < keys; i++) {
1689     target = bci + (jint)Bytes::get_Java_u4(aligned_bcp+(3+i*delta)*jintSize);
1690     stackmap_table->check_jump_target(
1691       current_frame, target, CHECK_VERIFY(this));
1692   }
1693 }
1694 
1695 bool ClassVerifier::name_in_supers(
1696     symbolOop ref_name, instanceKlassHandle current) {
1697   klassOop super = current->super();
1698   while (super != NULL) {
1699     if (super->klass_part()->name() == ref_name) {
1700       return true;
1701     }
1702     super = super->klass_part()->super();
1703   }
1704   return false;
1705 }
1706 
1707 void ClassVerifier::verify_field_instructions(RawBytecodeStream* bcs,
1708                                               StackMapFrame* current_frame,
1709                                               constantPoolHandle cp,
1710                                               TRAPS) {
1711   u2 index = bcs->get_index_big();
1712   verify_cp_type(index, cp, 1 << JVM_CONSTANT_Fieldref, CHECK_VERIFY(this));
1713 
1714   // Get field name and signature
1715   symbolHandle field_name = symbolHandle(THREAD, cp->name_ref_at(index));
1716   symbolHandle field_sig = symbolHandle(THREAD, cp->signature_ref_at(index));
1717 
1718   if (!SignatureVerifier::is_valid_type_signature(field_sig)) {
1719     class_format_error(
1720       "Invalid signature for field in class %s referenced "
1721       "from constant pool index %d", _klass->external_name(), index);
1722     return;
1723   }
1724 
1725   // Get referenced class type
1726   VerificationType ref_class_type = cp_ref_index_to_type(
1727     index, cp, CHECK_VERIFY(this));
1728   if (!ref_class_type.is_object()) {
1729     verify_error(
1730       "Expecting reference to class in class %s at constant pool index %d",
1731       _klass->external_name(), index);
1732     return;
1733   }
1734   VerificationType target_class_type = ref_class_type;
1735 
1736   assert(sizeof(VerificationType) == sizeof(uintptr_t),
1737         "buffer type must match VerificationType size");
1738   uintptr_t field_type_buffer[2];
1739   VerificationType* field_type = (VerificationType*)field_type_buffer;
1740   // If we make a VerificationType[2] array directly, the compiler calls
1741   // to the c-runtime library to do the allocation instead of just
1742   // stack allocating it.  Plus it would run constructors.  This shows up
1743   // in performance profiles.
1744 
1745   SignatureStream sig_stream(field_sig, false);
1746   VerificationType stack_object_type;
1747   int n = change_sig_to_verificationType(
1748     &sig_stream, field_type, CHECK_VERIFY(this));
1749   u2 bci = bcs->bci();
1750   bool is_assignable;
1751   switch (bcs->code()) {
1752     case Bytecodes::_getstatic: {
1753       for (int i = 0; i < n; i++) {
1754         current_frame->push_stack(field_type[i], CHECK_VERIFY(this));
1755       }
1756       break;
1757     }
1758     case Bytecodes::_putstatic: {
1759       for (int i = n - 1; i >= 0; i--) {
1760         current_frame->pop_stack(field_type[i], CHECK_VERIFY(this));
1761       }
1762       break;
1763     }
1764     case Bytecodes::_getfield: {
1765       stack_object_type = current_frame->pop_stack(
1766         target_class_type, CHECK_VERIFY(this));
1767       for (int i = 0; i < n; i++) {
1768         current_frame->push_stack(field_type[i], CHECK_VERIFY(this));
1769       }
1770       goto check_protected;
1771     }
1772     case Bytecodes::_putfield: {
1773       for (int i = n - 1; i >= 0; i--) {
1774         current_frame->pop_stack(field_type[i], CHECK_VERIFY(this));
1775       }
1776       stack_object_type = current_frame->pop_stack(CHECK_VERIFY(this));
1777 
1778       // The JVMS 2nd edition allows field initialization before the superclass
1779       // initializer, if the field is defined within the current class.
1780       fieldDescriptor fd;
1781       if (stack_object_type == VerificationType::uninitialized_this_type() &&
1782           target_class_type.equals(current_type()) &&
1783           _klass->find_local_field(field_name(), field_sig(), &fd)) {
1784         stack_object_type = current_type();
1785       }
1786       is_assignable = target_class_type.is_assignable_from(
1787         stack_object_type, current_class(), CHECK_VERIFY(this));
1788       if (!is_assignable) {
1789         verify_error(bci, "Bad type on operand stack in putfield");
1790         return;
1791       }
1792     }
1793     check_protected: {
1794       if (_this_type == stack_object_type)
1795         break; // stack_object_type must be assignable to _current_class_type
1796       symbolHandle ref_class_name = symbolHandle(THREAD,
1797         cp->klass_name_at(cp->klass_ref_index_at(index)));
1798       if (!name_in_supers(ref_class_name(), current_class()))
1799         // stack_object_type must be assignable to _current_class_type since:
1800         // 1. stack_object_type must be assignable to ref_class.
1801         // 2. ref_class must be _current_class or a subclass of it. It can't
1802         //    be a superclass of it. See revised JVMS 5.4.4.
1803         break;
1804 
1805       klassOop ref_class_oop = load_class(ref_class_name, CHECK);
1806       if (is_protected_access(current_class(), ref_class_oop, field_name(),
1807                               field_sig(), false)) {
1808         // It's protected access, check if stack object is assignable to
1809         // current class.
1810         is_assignable = current_type().is_assignable_from(
1811           stack_object_type, current_class(), CHECK_VERIFY(this));
1812         if (!is_assignable) {
1813           verify_error(bci, "Bad access to protected data in getfield");
1814           return;
1815         }
1816       }
1817       break;
1818     }
1819     default: ShouldNotReachHere();
1820   }
1821 }
1822 
1823 void ClassVerifier::verify_invoke_init(
1824     RawBytecodeStream* bcs, VerificationType ref_class_type,
1825     StackMapFrame* current_frame, u4 code_length, bool *this_uninit,
1826     constantPoolHandle cp, TRAPS) {
1827   u2 bci = bcs->bci();
1828   VerificationType type = current_frame->pop_stack(
1829     VerificationType::reference_check(), CHECK_VERIFY(this));
1830   if (type == VerificationType::uninitialized_this_type()) {
1831     // The method must be an <init> method of either this class, or one of its
1832     // superclasses
1833     klassOop oop = current_class()();
1834     Klass* klass = oop->klass_part();
1835     while (klass != NULL && ref_class_type.name() != klass->name()) {
1836       klass = klass->super()->klass_part();
1837     }
1838     if (klass == NULL) {
1839       verify_error(bci, "Bad <init> method call");
1840       return;
1841     }
1842     current_frame->initialize_object(type, current_type());
1843     *this_uninit = true;
1844   } else if (type.is_uninitialized()) {
1845     u2 new_offset = type.bci();
1846     address new_bcp = bcs->bcp() - bci + new_offset;
1847     if (new_offset > (code_length - 3) || (*new_bcp) != Bytecodes::_new) {
1848       verify_error(new_offset, "Expecting new instruction");
1849       return;
1850     }
1851     u2 new_class_index = Bytes::get_Java_u2(new_bcp + 1);
1852     verify_cp_class_type(new_class_index, cp, CHECK_VERIFY(this));
1853 
1854     // The method must be an <init> method of the indicated class
1855     VerificationType new_class_type = cp_index_to_type(
1856       new_class_index, cp, CHECK_VERIFY(this));
1857     if (!new_class_type.equals(ref_class_type)) {
1858       verify_error(bci, "Call to wrong <init> method");
1859       return;
1860     }
1861     // According to the VM spec, if the referent class is a superclass of the
1862     // current class, and is in a different runtime package, and the method is
1863     // protected, then the objectref must be the current class or a subclass
1864     // of the current class.
1865     VerificationType objectref_type = new_class_type;
1866     if (name_in_supers(ref_class_type.name(), current_class())) {
1867       klassOop ref_klass = load_class(
1868         ref_class_type.name(), CHECK_VERIFY(this));
1869       methodOop m = instanceKlass::cast(ref_klass)->uncached_lookup_method(
1870         vmSymbols::object_initializer_name(),
1871         cp->signature_ref_at(bcs->get_index_big()));
1872       instanceKlassHandle mh(THREAD, m->method_holder());
1873       if (m->is_protected() && !mh->is_same_class_package(_klass())) {
1874         bool assignable = current_type().is_assignable_from(
1875           objectref_type, current_class(), CHECK_VERIFY(this));
1876         if (!assignable) {
1877           verify_error(bci, "Bad access to protected <init> method");
1878           return;
1879         }
1880       }
1881     }
1882     current_frame->initialize_object(type, new_class_type);
1883   } else {
1884     verify_error(bci, "Bad operand type when invoking <init>");
1885     return;
1886   }
1887 }
1888 
1889 void ClassVerifier::verify_invoke_instructions(
1890     RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame,
1891     bool *this_uninit, VerificationType return_type,
1892     constantPoolHandle cp, TRAPS) {
1893   // Make sure the constant pool item is the right type
1894   u2 index = bcs->get_index_big();
1895   Bytecodes::Code opcode = bcs->code();
1896   unsigned int types = (opcode == Bytecodes::_invokeinterface
1897                                 ? 1 << JVM_CONSTANT_InterfaceMethodref
1898                                 : 1 << JVM_CONSTANT_Methodref);
1899   verify_cp_type(index, cp, types, CHECK_VERIFY(this));
1900 
1901   // Get method name and signature
1902   symbolHandle method_name(THREAD, cp->name_ref_at(index));
1903   symbolHandle method_sig(THREAD, cp->signature_ref_at(index));
1904 
1905   if (!SignatureVerifier::is_valid_method_signature(method_sig)) {
1906     class_format_error(
1907       "Invalid method signature in class %s referenced "
1908       "from constant pool index %d", _klass->external_name(), index);
1909     return;
1910   }
1911 
1912   // Get referenced class type
1913   VerificationType ref_class_type = cp_ref_index_to_type(
1914     index, cp, CHECK_VERIFY(this));
1915 
1916   // For a small signature length, we just allocate 128 bytes instead
1917   // of parsing the signature once to find its size.
1918   // -3 is for '(', ')' and return descriptor; multiply by 2 is for
1919   // longs/doubles to be consertive.
1920   assert(sizeof(VerificationType) == sizeof(uintptr_t),
1921         "buffer type must match VerificationType size");
1922   uintptr_t on_stack_sig_types_buffer[128];
1923   // If we make a VerificationType[128] array directly, the compiler calls
1924   // to the c-runtime library to do the allocation instead of just
1925   // stack allocating it.  Plus it would run constructors.  This shows up
1926   // in performance profiles.
1927 
1928   VerificationType* sig_types;
1929   int size = (method_sig->utf8_length() - 3) * 2;
1930   if (size > 128) {
1931     // Long and double occupies two slots here.
1932     ArgumentSizeComputer size_it(method_sig);
1933     size = size_it.size();
1934     sig_types = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, VerificationType, size);
1935   } else{
1936     sig_types = (VerificationType*)on_stack_sig_types_buffer;
1937   }
1938   SignatureStream sig_stream(method_sig);
1939   int sig_i = 0;
1940   while (!sig_stream.at_return_type()) {
1941     sig_i += change_sig_to_verificationType(
1942       &sig_stream, &sig_types[sig_i], CHECK_VERIFY(this));
1943     sig_stream.next();
1944   }
1945   int nargs = sig_i;
1946 
1947 #ifdef ASSERT
1948   {
1949     ArgumentSizeComputer size_it(method_sig);
1950     assert(nargs == size_it.size(), "Argument sizes do not match");
1951     assert(nargs <= (method_sig->utf8_length() - 3) * 2, "estimate of max size isn't conservative enough");
1952   }
1953 #endif
1954 
1955   // Check instruction operands
1956   u2 bci = bcs->bci();
1957   if (opcode == Bytecodes::_invokeinterface) {
1958     address bcp = bcs->bcp();
1959     // 4905268: count operand in invokeinterface should be nargs+1, not nargs.
1960     // JSR202 spec: The count operand of an invokeinterface instruction is valid if it is
1961     // the difference between the size of the operand stack before and after the instruction
1962     // executes.
1963     if (*(bcp+3) != (nargs+1)) {
1964       verify_error(bci, "Inconsistent args count operand in invokeinterface");
1965       return;
1966     }
1967     if (*(bcp+4) != 0) {
1968       verify_error(bci, "Fourth operand byte of invokeinterface must be zero");
1969       return;
1970     }
1971   }
1972 
1973   if (method_name->byte_at(0) == '<') {
1974     // Make sure <init> can only be invoked by invokespecial
1975     if (opcode != Bytecodes::_invokespecial ||
1976         method_name() != vmSymbols::object_initializer_name()) {
1977       verify_error(bci, "Illegal call to internal method");
1978       return;
1979     }
1980   } else if (opcode == Bytecodes::_invokespecial
1981              && !ref_class_type.equals(current_type())
1982              && !ref_class_type.equals(VerificationType::reference_type(
1983                   current_class()->super()->klass_part()->name()))) {
1984     bool subtype = ref_class_type.is_assignable_from(
1985       current_type(), current_class(), CHECK_VERIFY(this));
1986     if (!subtype) {
1987       verify_error(bci, "Bad invokespecial instruction: "
1988           "current class isn't assignable to reference class.");
1989        return;
1990     }
1991   }
1992   // Match method descriptor with operand stack
1993   for (int i = nargs - 1; i >= 0; i--) {  // Run backwards
1994     current_frame->pop_stack(sig_types[i], CHECK_VERIFY(this));
1995   }
1996   // Check objectref on operand stack
1997   if (opcode != Bytecodes::_invokestatic) {
1998     if (method_name() == vmSymbols::object_initializer_name()) {  // <init> method
1999       verify_invoke_init(bcs, ref_class_type, current_frame,
2000         code_length, this_uninit, cp, CHECK_VERIFY(this));
2001     } else {   // other methods
2002       // Ensures that target class is assignable to method class.
2003       if (opcode == Bytecodes::_invokespecial) {
2004         current_frame->pop_stack(current_type(), CHECK_VERIFY(this));
2005       } else if (opcode == Bytecodes::_invokevirtual) {
2006         VerificationType stack_object_type =
2007           current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2008         if (current_type() != stack_object_type) {
2009           assert(cp->cache() == NULL, "not rewritten yet");
2010           symbolHandle ref_class_name = symbolHandle(THREAD,
2011             cp->klass_name_at(cp->klass_ref_index_at(index)));
2012           // See the comments in verify_field_instructions() for
2013           // the rationale behind this.
2014           if (name_in_supers(ref_class_name(), current_class())) {
2015             klassOop ref_class = load_class(ref_class_name, CHECK);
2016             if (is_protected_access(
2017                   _klass, ref_class, method_name(), method_sig(), true)) {
2018               // It's protected access, check if stack object is
2019               // assignable to current class.
2020               bool is_assignable = current_type().is_assignable_from(
2021                 stack_object_type, current_class(), CHECK_VERIFY(this));
2022               if (!is_assignable) {
2023                 if (ref_class_type.name() == vmSymbols::java_lang_Object()
2024                     && stack_object_type.is_array()
2025                     && method_name() == vmSymbols::clone_name()) {
2026                   // Special case: arrays pretend to implement public Object
2027                   // clone().
2028                 } else {
2029                   verify_error(bci,
2030                     "Bad access to protected data in invokevirtual");
2031                   return;
2032                 }
2033               }
2034             }
2035           }
2036         }
2037       } else {
2038         assert(opcode == Bytecodes::_invokeinterface, "Unexpected opcode encountered");
2039         current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2040       }
2041     }
2042   }
2043   // Push the result type.
2044   if (sig_stream.type() != T_VOID) {
2045     if (method_name() == vmSymbols::object_initializer_name()) {
2046       // <init> method must have a void return type
2047       verify_error(bci, "Return type must be void in <init> method");
2048       return;
2049     }
2050     VerificationType return_type[2];
2051     int n = change_sig_to_verificationType(
2052       &sig_stream, return_type, CHECK_VERIFY(this));
2053     for (int i = 0; i < n; i++) {
2054       current_frame->push_stack(return_type[i], CHECK_VERIFY(this)); // push types backwards
2055     }
2056   }
2057 }
2058 
2059 VerificationType ClassVerifier::get_newarray_type(
2060     u2 index, u2 bci, TRAPS) {
2061   const char* from_bt[] = {
2062     NULL, NULL, NULL, NULL, "[Z", "[C", "[F", "[D", "[B", "[S", "[I", "[J",
2063   };
2064   if (index < T_BOOLEAN || index > T_LONG) {
2065     verify_error(bci, "Illegal newarray instruction");
2066     return VerificationType::bogus_type();
2067   }
2068 
2069   // from_bt[index] contains the array signature which has a length of 2
2070   symbolHandle sig = oopFactory::new_symbol_handle(
2071     from_bt[index], 2, CHECK_(VerificationType::bogus_type()));
2072   return VerificationType::reference_type(sig);
2073 }
2074 
2075 void ClassVerifier::verify_anewarray(
2076     u2 index, constantPoolHandle cp, StackMapFrame* current_frame, TRAPS) {
2077   verify_cp_class_type(index, cp, CHECK_VERIFY(this));
2078   current_frame->pop_stack(
2079     VerificationType::integer_type(), CHECK_VERIFY(this));
2080 
2081   VerificationType component_type =
2082     cp_index_to_type(index, cp, CHECK_VERIFY(this));
2083   ResourceMark rm(THREAD);
2084   int length;
2085   char* arr_sig_str;
2086   if (component_type.is_array()) {     // it's an array
2087     const char* component_name = component_type.name()->as_utf8();
2088     // add one dimension to component
2089     length = (int)strlen(component_name) + 1;
2090     arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length);
2091     arr_sig_str[0] = '[';
2092     strncpy(&arr_sig_str[1], component_name, length - 1);
2093   } else {         // it's an object or interface
2094     const char* component_name = component_type.name()->as_utf8();
2095     // add one dimension to component with 'L' prepended and ';' postpended.
2096     length = (int)strlen(component_name) + 3;
2097     arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length);
2098     arr_sig_str[0] = '[';
2099     arr_sig_str[1] = 'L';
2100     strncpy(&arr_sig_str[2], component_name, length - 2);
2101     arr_sig_str[length - 1] = ';';
2102   }
2103   symbolHandle arr_sig = oopFactory::new_symbol_handle(
2104     arr_sig_str, length, CHECK_VERIFY(this));
2105   VerificationType new_array_type = VerificationType::reference_type(arr_sig);
2106   current_frame->push_stack(new_array_type, CHECK_VERIFY(this));
2107 }
2108 
2109 void ClassVerifier::verify_iload(u2 index, StackMapFrame* current_frame, TRAPS) {
2110   current_frame->get_local(
2111     index, VerificationType::integer_type(), CHECK_VERIFY(this));
2112   current_frame->push_stack(
2113     VerificationType::integer_type(), CHECK_VERIFY(this));
2114 }
2115 
2116 void ClassVerifier::verify_lload(u2 index, StackMapFrame* current_frame, TRAPS) {
2117   current_frame->get_local_2(
2118     index, VerificationType::long_type(),
2119     VerificationType::long2_type(), CHECK_VERIFY(this));
2120   current_frame->push_stack_2(
2121     VerificationType::long_type(),
2122     VerificationType::long2_type(), CHECK_VERIFY(this));
2123 }
2124 
2125 void ClassVerifier::verify_fload(u2 index, StackMapFrame* current_frame, TRAPS) {
2126   current_frame->get_local(
2127     index, VerificationType::float_type(), CHECK_VERIFY(this));
2128   current_frame->push_stack(
2129     VerificationType::float_type(), CHECK_VERIFY(this));
2130 }
2131 
2132 void ClassVerifier::verify_dload(u2 index, StackMapFrame* current_frame, TRAPS) {
2133   current_frame->get_local_2(
2134     index, VerificationType::double_type(),
2135     VerificationType::double2_type(), CHECK_VERIFY(this));
2136   current_frame->push_stack_2(
2137     VerificationType::double_type(),
2138     VerificationType::double2_type(), CHECK_VERIFY(this));
2139 }
2140 
2141 void ClassVerifier::verify_aload(u2 index, StackMapFrame* current_frame, TRAPS) {
2142   VerificationType type = current_frame->get_local(
2143     index, VerificationType::reference_check(), CHECK_VERIFY(this));
2144   current_frame->push_stack(type, CHECK_VERIFY(this));
2145 }
2146 
2147 void ClassVerifier::verify_istore(u2 index, StackMapFrame* current_frame, TRAPS) {
2148   current_frame->pop_stack(
2149     VerificationType::integer_type(), CHECK_VERIFY(this));
2150   current_frame->set_local(
2151     index, VerificationType::integer_type(), CHECK_VERIFY(this));
2152 }
2153 
2154 void ClassVerifier::verify_lstore(u2 index, StackMapFrame* current_frame, TRAPS) {
2155   current_frame->pop_stack_2(
2156     VerificationType::long2_type(),
2157     VerificationType::long_type(), CHECK_VERIFY(this));
2158   current_frame->set_local_2(
2159     index, VerificationType::long_type(),
2160     VerificationType::long2_type(), CHECK_VERIFY(this));
2161 }
2162 
2163 void ClassVerifier::verify_fstore(u2 index, StackMapFrame* current_frame, TRAPS) {
2164   current_frame->pop_stack(VerificationType::float_type(), CHECK_VERIFY(this));
2165   current_frame->set_local(
2166     index, VerificationType::float_type(), CHECK_VERIFY(this));
2167 }
2168 
2169 void ClassVerifier::verify_dstore(u2 index, StackMapFrame* current_frame, TRAPS) {
2170   current_frame->pop_stack_2(
2171     VerificationType::double2_type(),
2172     VerificationType::double_type(), CHECK_VERIFY(this));
2173   current_frame->set_local_2(
2174     index, VerificationType::double_type(),
2175     VerificationType::double2_type(), CHECK_VERIFY(this));
2176 }
2177 
2178 void ClassVerifier::verify_astore(u2 index, StackMapFrame* current_frame, TRAPS) {
2179   VerificationType type = current_frame->pop_stack(
2180     VerificationType::reference_check(), CHECK_VERIFY(this));
2181   current_frame->set_local(index, type, CHECK_VERIFY(this));
2182 }
2183 
2184 void ClassVerifier::verify_iinc(u2 index, StackMapFrame* current_frame, TRAPS) {
2185   VerificationType type = current_frame->get_local(
2186     index, VerificationType::integer_type(), CHECK_VERIFY(this));
2187   current_frame->set_local(index, type, CHECK_VERIFY(this));
2188 }
2189 
2190 void ClassVerifier::verify_return_value(
2191     VerificationType return_type, VerificationType type, u2 bci, TRAPS) {
2192   if (return_type == VerificationType::bogus_type()) {
2193     verify_error(bci, "Method expects a return value");
2194     return;
2195   }
2196   bool match = return_type.is_assignable_from(type, _klass, CHECK_VERIFY(this));
2197   if (!match) {
2198     verify_error(bci, "Bad return type");
2199     return;
2200   }
2201 }