< prev index next >

src/share/vm/oops/method.cpp

Print this page

        

@@ -546,10 +546,13 @@
 
       case Bytecodes::_goto_w:
       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();
   return _access_flags.has_loops();
 }

@@ -1386,11 +1389,14 @@
 
   // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod*
   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));
 
   // Reset correct method/const method, method size, and parameter info

@@ -1509,10 +1515,12 @@
     case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name):
       // pretend it is the corresponding method in the non-strict class:
       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;
 
   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*., VarHandle
   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):

@@ -1520,10 +1528,13 @@
     if (!is_native())  break;
     id = MethodHandles::signature_polymorphic_name_id(method_holder(), name());
     if (is_static() != MethodHandles::is_signature_polymorphic_static(id))
       id = vmIntrinsics::_none;
     break;
+
+  default:
+    break;
   }
 
   if (id != vmIntrinsics::_none) {
     // Set up its iid.  It is an alias method.
     set_intrinsic_id(id);
< prev index next >