src/share/vm/classfile/verifier.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File bug_8130669.1 Sdiff src/share/vm/classfile

src/share/vm/classfile/verifier.cpp

Print this page




2829                   verify_error(ErrorContext::bad_type(bci,
2830                       current_frame->stack_top_ctx(),
2831                       TypeOrigin::implicit(current_type())),
2832                       "Bad access to protected data in invokevirtual");
2833                   return;
2834                 }
2835               }
2836             }
2837           }
2838         }
2839       } else {
2840         assert(opcode == Bytecodes::_invokeinterface, "Unexpected opcode encountered");
2841         current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2842       }
2843     }
2844   }
2845   // Push the result type.
2846   if (sig_stream.type() != T_VOID) {
2847     if (method_name == vmSymbols::object_initializer_name()) {
2848       // <init> method must have a void return type
2849       /* Unreachable?  Class file parser verifies that methods with '<' have
2850        * void return */
2851       verify_error(ErrorContext::bad_code(bci),
2852           "Return type must be void in <init> method");
2853       return;
2854     }
2855     VerificationType return_type[2];
2856     int n = change_sig_to_verificationType(
2857       &sig_stream, return_type, CHECK_VERIFY(this));
2858     for (int i = 0; i < n; i++) {
2859       current_frame->push_stack(return_type[i], CHECK_VERIFY(this)); // push types backwards
2860     }
2861   }
2862 }
2863 
2864 VerificationType ClassVerifier::get_newarray_type(
2865     u2 index, u2 bci, TRAPS) {
2866   const char* from_bt[] = {
2867     NULL, NULL, NULL, NULL, "[Z", "[C", "[F", "[D", "[B", "[S", "[I", "[J",
2868   };
2869   if (index < T_BOOLEAN || index > T_LONG) {




2829                   verify_error(ErrorContext::bad_type(bci,
2830                       current_frame->stack_top_ctx(),
2831                       TypeOrigin::implicit(current_type())),
2832                       "Bad access to protected data in invokevirtual");
2833                   return;
2834                 }
2835               }
2836             }
2837           }
2838         }
2839       } else {
2840         assert(opcode == Bytecodes::_invokeinterface, "Unexpected opcode encountered");
2841         current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2842       }
2843     }
2844   }
2845   // Push the result type.
2846   if (sig_stream.type() != T_VOID) {
2847     if (method_name == vmSymbols::object_initializer_name()) {
2848       // <init> method must have a void return type
2849       /* Unreachable?  Class file parser verifies that <init> methods have
2850        * void return */
2851       verify_error(ErrorContext::bad_code(bci),
2852           "Return type must be void in <init> method");
2853       return;
2854     }
2855     VerificationType return_type[2];
2856     int n = change_sig_to_verificationType(
2857       &sig_stream, return_type, CHECK_VERIFY(this));
2858     for (int i = 0; i < n; i++) {
2859       current_frame->push_stack(return_type[i], CHECK_VERIFY(this)); // push types backwards
2860     }
2861   }
2862 }
2863 
2864 VerificationType ClassVerifier::get_newarray_type(
2865     u2 index, u2 bci, TRAPS) {
2866   const char* from_bt[] = {
2867     NULL, NULL, NULL, NULL, "[Z", "[C", "[F", "[D", "[B", "[S", "[I", "[J",
2868   };
2869   if (index < T_BOOLEAN || index > T_LONG) {


src/share/vm/classfile/verifier.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File