From: Anthony Green Date: Wed, 8 Mar 2000 03:10:19 +0000 (+0000) Subject: re GNATS gcj/107 (Bad array or type conversion bug when compiling bytecode) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3fc61836514d0f883c45a4a05ed79fb7a7eeb1e8;p=gcc.git re GNATS gcj/107 (Bad array or type conversion bug when compiling bytecode) 1999-11-28 Anthony Green * decl.c (find_local_variable): Reuse single slot decls when appropriate. (This fixes the Java PR #107: http://sourceware.cygnus.com/ml/java-prs/1999-q4/msg00171.html) From-SVN: r32398 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 034faed9769..305fae8da69 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -672,6 +672,11 @@ Tue Nov 30 12:28:34 1999 Alexandre Petit-Bianco check. * expr.c (expand_java_arraystore): Likewise. +1999-11-28 Anthony Green + + * decl.c (find_local_variable): Reuse single slot decls when + appropriate. + Wed Nov 24 17:33:26 1999 Alexandre Petit-Bianco * jcf-parse.c (saw_java_source): Global variable removed. diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 13d2dd73373..3aea82031f5 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -136,9 +136,7 @@ push_jvm_slot (index, decl) /* Find a VAR_DECL (or PARM_DECL) at local index INDEX that has type TYPE, that is valid at PC (or -1 if any pc). - If there is no existing matching decl, allocate one. - If we find a decl with matching modes but different types, - we re-use the rtl, but create a new decl. */ + If there is no existing matching decl, allocate one. */ tree find_local_variable (index, type, pc) @@ -148,6 +146,7 @@ find_local_variable (index, type, pc) { tree decl = TREE_VEC_ELT (decl_map, index); tree best = NULL_TREE; + while (decl != NULL_TREE) { int in_range; @@ -156,6 +155,10 @@ find_local_variable (index, type, pc) && pc < DECL_LOCAL_END_PC (decl)); if ((TREE_TYPE (decl) == type + || (TREE_CODE (TREE_TYPE (decl)) == TREE_CODE (type) + && TYPE_PRECISION (TREE_TYPE (decl)) <= 32 + && TYPE_PRECISION (type) <= 32 + && TREE_CODE (type) != POINTER_TYPE) || (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE && type == ptr_type_node)) && in_range)