Mercurial > hg > graal-compiler
comparison src/share/vm/classfile/verifier.hpp @ 18094:2993491d47df jdk8u25-b12
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
18093:6641ab47243f | 18094:2993491d47df |
---|---|
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) { |