From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17786 invoked by alias); 12 Oct 2008 21:14:56 -0000 Received: (qmail 16818 invoked by alias); 12 Oct 2008 21:13:35 -0000 Date: Sun, 12 Oct 2008 21:14:00 -0000 Message-ID: <20081012211335.16817.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug target/37808] [4.4 Regression]: Revision 141067 breaks Linux/x86 In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "zadeck at naturalbridge dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-10/txt/msg00813.txt.bz2 ------- Comment #8 from zadeck at naturalbridge dot com 2008-10-12 21:13 ------- Subject: Re: [4.4 Regression]: Revision 141067 breaks Linux/x86 andreast at gcc dot gnu dot org wrote: > ------- Comment #7 from andreast at gcc dot gnu dot org 2008-10-12 20:31 ------- > I see a failure on sparc-solaris8/10 too. Configury of stage2 fails. > Applying the mentioned patch cures compilation. > My sparc config is with multilib. 32-bit/64-bit. > > > The problem is that the bb is no longer kept in the df-ref, and is instead extracted from the insn. This particular problem was caused by insns being deleted in a pass that defers rescanning but that also changes register numbers. The fix checks to make sure the insn is still in a basic block before trying to mark the block as being dirty. 2008-10-12 Kenneth Zadeck PR middle-end/37808 * df-scan.c (df_ref_change_reg_with_loc_1): Added test to make sure that ref has valid bb. Tested by me on both x86-32 and x86-64. Also tested by andreast on spark-solaris and by keating. OK to commit? kenny Index: df-scan.c =================================================================== --- df-scan.c (revision 141071) +++ df-scan.c (working copy) @@ -1980,7 +1980,8 @@ df_ref_change_reg_with_loc_1 (struct df_ DF_REF_PREV_REG (new_df->reg_chain) = the_ref; new_df->reg_chain = the_ref; new_df->n_refs++; - df_set_bb_dirty (DF_REF_BB (the_ref)); + if (DF_REF_BB (the_ref)) + df_set_bb_dirty (DF_REF_BB (the_ref)); /* Need to sort the record again that the ref was in because the regno is a sorting key. First, find the right -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37808