From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13679 invoked by alias); 12 Dec 2002 12:46: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 13663 invoked by uid 71); 12 Dec 2002 12:46:07 -0000 Date: Thu, 12 Dec 2002 04:46:00 -0000 Message-ID: <20021212124607.13662.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: "Christian Ehrhardt" Subject: Re: c/6815: [3.2/3.3 regression] ICE with longjmp if -fprofile-arcs -O is specified Reply-To: "Christian Ehrhardt" X-SW-Source: 2002-12/txt/msg00701.txt.bz2 List-Id: The following reply was made to PR c/6815; it has been noted by GNATS. From: "Christian Ehrhardt" To: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org, dtucker@zip.com.au Cc: rth@redhat.com Subject: Re: c/6815: [3.2/3.3 regression] ICE with longjmp if -fprofile-arcs -O is specified Date: Thu, 12 Dec 2002 13:37:26 +0100 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6815 These messages on gcc@gcc.gnu.org are about the same problem. This mail is mainly meant to make sure that this information is attached to the audit trail of PR 6815: http://gcc.gnu.org/ml/gcc/2002-12/msg00377.html http://gcc.gnu.org/ml/gcc/2002-12/msg00378.html http://gcc.gnu.org/ml/gcc/2002-12/msg00458.html http://gcc.gnu.org/ml/gcc/2002-12/msg00475.html Citing rth in one of theses mails: | Before the invocation of the profiling routines, no successors is correct. | During the invocation of the profiling routines, however, we add fake | edges from calls to the exit block. I would not expect this to change | for a noreturn function like longjmp. | | So I guess the quesion is "where did you get this null, exactly?" The crash is in cfgrtl.c:1314 in function insert_insn_on_edge in this piece of code: | void | insert_insn_on_edge (pattern, e) | rtx pattern; | edge e; | { | /* We cannot insert instructions on an abnormal critical edge. | It will be easier to find the culprit if we die now. */ | if ((e->flags & EDGE_ABNORMAL) && EDGE_CRITICAL_P (e)) | abort (); | [ ... ] 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. regards Christian -- THAT'S ALL FOLKS!