diff -r 8eeacdc76bf2 -r 75aa3e39d02c hotspot/src/share/vm/oops/method.cpp --- a/hotspot/src/share/vm/oops/method.cpp Wed Jul 05 11:03:19 2017 -0700 +++ b/hotspot/src/share/vm/oops/method.cpp Thu Jul 06 01:50:26 2017 +0200 @@ -550,6 +550,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(); @@ -1390,7 +1393,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)); @@ -1513,6 +1519,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; @@ -1524,6 +1532,9 @@ if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) id = vmIntrinsics::_none; break; + + default: + break; } if (id != vmIntrinsics::_none) {