comparison src/share/vm/classfile/verifier.hpp @ 20242:d14a18794c90

8051012: Regression in verifier for <init> method call from inside of a branch Summary: Fix stackmap matching for branches. Reviewed-by: coleenp, lfoltan, acorn
author hseigel
date Sat, 02 Aug 2014 16:28:59 -0400
parents f73af4455d7d
children 077483254bf6
comparison
equal deleted inserted replaced
20241:bcd72ab4d91f 20242:d14a18794c90
256 Symbol* _exception_type; 256 Symbol* _exception_type;
257 char* _message; 257 char* _message;
258 258
259 ErrorContext _error_context; // contains information about an error 259 ErrorContext _error_context; // contains information about an error
260 260
261 // Used to detect illegal jumps over calls to super() nd this() in ctors.
262 int32_t _furthest_jump;
263
264 void verify_method(methodHandle method, TRAPS); 261 void verify_method(methodHandle method, TRAPS);
265 char* generate_code_data(methodHandle m, u4 code_length, TRAPS); 262 char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
266 void verify_exception_handler_table(u4 code_length, char* code_data, 263 void verify_exception_handler_table(u4 code_length, char* code_data,
267 int& min, int& max, TRAPS); 264 int& min, int& max, TRAPS);
268 void verify_local_variable_table(u4 code_length, char* code_data, TRAPS); 265 void verify_local_variable_table(u4 code_length, char* code_data, TRAPS);
404 Symbol* create_temporary_symbol( 401 Symbol* create_temporary_symbol(
405 const Symbol* s, int begin, int end, TRAPS); 402 const Symbol* s, int begin, int end, TRAPS);
406 Symbol* create_temporary_symbol(const char *s, int length, TRAPS); 403 Symbol* create_temporary_symbol(const char *s, int length, TRAPS);
407 404
408 TypeOrigin ref_ctx(const char* str, TRAPS); 405 TypeOrigin ref_ctx(const char* str, TRAPS);
409
410 // Keep track of the furthest branch done in a method to make sure that
411 // there are no branches over calls to super() or this() from inside of
412 // a constructor.
413 int32_t furthest_jump() { return _furthest_jump; }
414
415 void set_furthest_jump(int32_t target) {
416 _furthest_jump = target;
417 }
418
419 void update_furthest_jump(int32_t target) {
420 if (target > _furthest_jump) _furthest_jump = target;
421 }
422 406
423 }; 407 };
424 408
425 inline int ClassVerifier::change_sig_to_verificationType( 409 inline int ClassVerifier::change_sig_to_verificationType(
426 SignatureStream* sig_type, VerificationType* inference_type, TRAPS) { 410 SignatureStream* sig_type, VerificationType* inference_type, TRAPS) {