diff options
author | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 1999-12-06 11:56:58 -0800 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 1999-12-06 11:56:58 -0800 |
commit | de1f429d34431c2609b8d88588b63ade95abf0e7 (patch) | |
tree | ddf284ed2a7ed8687ce5deda9ffcab1baff6b2c9 /gcc/java/verify.c | |
parent | 730f02076462ea347ce60278f16191cf42960fe0 (diff) | |
download | gcc-de1f429d34431c2609b8d88588b63ade95abf0e7.zip gcc-de1f429d34431c2609b8d88588b63ade95abf0e7.tar.gz gcc-de1f429d34431c2609b8d88588b63ade95abf0e7.tar.bz2 |
[multiple changes]
Tue Nov 30 12:36:15 1999 Anthony Green <green@cygnus.com>
* verify.c (verify_jvm_instructions): Create new return label
chain if non existant (don't rely on the verified state of the jsr
target.)
Tue Nov 23 17:29:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* verify.c (merge_type_state): Non verified subroutines being
considered more than once to trigger passive type merge.
From-SVN: r30811
Diffstat (limited to 'gcc/java/verify.c')
-rw-r--r-- | gcc/java/verify.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/java/verify.c b/gcc/java/verify.c index 41ad823..d17a184 100644 --- a/gcc/java/verify.c +++ b/gcc/java/verify.c @@ -216,10 +216,13 @@ merge_type_state (label) int cur_length = stack_pointer + nlocals; tree vec = LABEL_TYPE_STATE (label); tree return_map; - if (vec == NULL_TREE) + if (vec == NULL_TREE || !LABEL_VERIFIED (label)) { - vec = make_tree_vec (cur_length); - LABEL_TYPE_STATE (label) = vec; + if (!vec) + { + vec = make_tree_vec (cur_length); + LABEL_TYPE_STATE (label) = vec; + } while (--cur_length >= 0) TREE_VEC_ELT (vec, cur_length) = type_map [cur_length]; return 1; @@ -1153,9 +1156,10 @@ verify_jvm_instructions (jcf, byte_ops, length) tree target = lookup_label (oldpc + IMMEDIATE_s2); tree return_label = lookup_label (PC); push_type (return_address_type_node); - if (! LABEL_VERIFIED (target)) + /* The return label chain will be null if this is the first + time we've seen this jsr target. */ + if (LABEL_RETURN_LABEL (target) == NULL_TREE) { - /* first time seen */ tree return_type_map; int nlocals = DECL_MAX_LOCALS (current_function_decl); index = nlocals + DECL_MAX_STACK (current_function_decl); |