From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1613 invoked by alias); 12 Dec 2002 18:16:08 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 1596 invoked by uid 71); 12 Dec 2002 18:16:07 -0000 Date: Thu, 12 Dec 2002 10:16:00 -0000 Message-ID: <20021212181607.1595.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Richard Henderson Subject: Re: c/6815: [3.2/3.3 regression] ICE with longjmp if -fprofile-arcs -O is specified Reply-To: Richard Henderson X-SW-Source: 2002-12/txt/msg00719.txt.bz2 List-Id: The following reply was made to PR c/6815; it has been noted by GNATS. From: Richard Henderson To: Christian Ehrhardt Cc: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org, dtucker@zip.com.au Subject: Re: c/6815: [3.2/3.3 regression] ICE with longjmp if -fprofile-arcs -O is specified Date: Thu, 12 Dec 2002 10:08:35 -0800 On Thu, Dec 12, 2002 at 01:37:26PM +0100, Christian Ehrhardt wrote: > where e is NULL. insert_insn_on_edge in turn is called from > flow_call_edges_add in cfganal.c:325 with this piece of code: > > | for (e = bb->succ; e; e = e->succ_next) > | if (e->dest == EXIT_BLOCK_PTR) > | break; > | > | insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); > | commit_edge_insertions (); > > which looks a bit strange if we keep in mind that insert_insn_on_edge > will crash if the second parameter is NULL. Indeed, this piece of code cannot handle a noreturn function in the last block. The following should fix it. r~ Index: cfganal.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfganal.c,v retrieving revision 1.30 diff -c -p -d -u -r1.30 cfganal.c --- cfganal.c 11 Oct 2002 21:09:59 -0000 1.30 +++ cfganal.c 12 Dec 2002 18:07:41 -0000 @@ -320,10 +320,11 @@ flow_call_edges_add (blocks) for (e = bb->succ; e; e = e->succ_next) if (e->dest == EXIT_BLOCK_PTR) - break; - - insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); - commit_edge_insertions (); + { + insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); + commit_edge_insertions (); + break; + } } }