< prev index next >

src/share/vm/code/compiledMethod.cpp

Print this page
rev 13052 : 8185334

@@ -312,22 +312,26 @@
     }
 
     // If value types are passed as fields, use the extended signature
     // which contains the types of all (oop) fields of the value type.
     if (ValueTypePassFieldsAsArgs && callee != NULL) {
+      // Get the extended signature from the callee's adapter through the attached method
+      Symbol* sig_ext = callee->adapter()->get_sig_extended();
+#ifdef ASSERT
       // Check if receiver or one of the arguments is a value type
       bool has_value_receiver = has_receiver && callee->method_holder()->is_value();
       bool has_value_argument = has_value_receiver;
       for (SignatureStream ss(signature); !has_value_argument && !ss.at_return_type(); ss.next()) {
         if (ss.type() == T_VALUETYPE) {
           has_value_argument = true;
+          break;
         }
       }
-      if (has_value_argument) {
-        // Get the extended signature from the callee's adapter through the attached method
-        signature = callee->adapter()->get_sig_extended();
-        assert(signature != NULL, "signature is null");
+      assert(has_value_argument == (sig_ext != NULL), "Signature is inconsistent");
+#endif
+      if (sig_ext != NULL) {
+        signature = sig_ext;
         has_receiver = false; // The extended signature contains the receiver type
       }
     }
 
     fr.oops_compiled_arguments_do(signature, has_receiver, has_appendix, reg_map, f);
< prev index next >