From: Andrew Haley Date: Fri, 18 Mar 2005 13:59:06 +0000 (+0000) Subject: re PR java/20522 (ICE in update_aliases, at java/decl.c:163) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6726a1f593aadde5bc0e1a54dff1f72700585d8e;p=gcc.git re PR java/20522 (ICE in update_aliases, at java/decl.c:163) 2005-03-18 Andrew Haley PR java/20522 * decl.c (update_aliases): Don't update variables that are about to die. (maybe_poplevels): Add comment. From-SVN: r96683 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index cd374a2d8e9..bcf91565981 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,10 @@ +2005-03-18 Andrew Haley + + PR java/20522 + * decl.c (update_aliases): Don't update variables that are about + to die. + (maybe_poplevels): Add comment. + 2005-03-17 Bryce McKinlay PR java/20502 diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 720b6322c99..2f9da979733 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -149,7 +149,10 @@ update_aliases (tree decl, int index, int pc) && LOCAL_SLOT_P (tmp) == 0 && (pc == -1 || (pc >= DECL_LOCAL_START_PC (tmp) - && pc <= DECL_LOCAL_END_PC (tmp))) + && pc < DECL_LOCAL_END_PC (tmp))) + /* This test is < (rather than <=) because there's no point + updating an alias that's about to die at the end of this + instruction. */ && (tmp_type == decl_type || (INTEGRAL_TYPE_P (tmp_type) && INTEGRAL_TYPE_P (decl_type) @@ -1741,6 +1744,12 @@ maybe_poplevels (int pc) current_pc = pc; #endif + /* FIXME: I'm pretty sure that this is wrong. Variable scopes are + inclusive, so a variable is live if pc == end_pc. Here, we + terminate a range if the current pc is equal to the end of the + range, and this is *before* we have generated code for the + instruction at end_pc. We're closing a binding level one + instruction too early.*/ while (current_binding_level->end_pc <= pc) poplevel (1, 0, 0); }