--- old/src/share/vm/oops/method.cpp 2017-06-26 18:37:10.000000000 -0700 +++ new/src/share/vm/oops/method.cpp 2017-06-26 18:37:10.000000000 -0700 @@ -548,6 +548,9 @@ case Bytecodes::_jsr_w: if( bcs.dest_w() < bcs.next_bci() ) _access_flags.set_has_loops(); break; + + default: + break; } } _access_flags.set_loops_flag_init(); @@ -1388,7 +1391,10 @@ ConstMethod* newcm = newm->constMethod(); int new_const_method_size = newm->constMethod()->size(); - memcpy(newm(), m(), sizeof(Method)); + // This works because the source and target are both Methods. Some compilers + // (e.g., clang) complain that the target vtable pointer will be stomped, + // so cast away newm()'s and m()'s Methodness. + memcpy((void*)newm(), (void*)m(), sizeof(Method)); // Create shallow copy of ConstMethod. memcpy(newcm, m->constMethod(), sizeof(ConstMethod)); @@ -1511,6 +1517,8 @@ klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math); id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); break; + default: + break; } break; @@ -1522,6 +1530,9 @@ if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) id = vmIntrinsics::_none; break; + + default: + break; } if (id != vmIntrinsics::_none) {