From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20151 invoked by alias); 12 Mar 2007 23:47:02 -0000 Received: (qmail 20114 invoked by uid 48); 12 Mar 2007 23:46:51 -0000 Date: Mon, 12 Mar 2007 23:47:00 -0000 Message-ID: <20070312234651.20113.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug middle-end/30984] [4.1/4.2/4.3 Regression] ICE with computed goto and constants In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "spark at gcc dot gnu dot org" 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: 2007-03/txt/msg01143.txt.bz2 ------- Comment #4 from spark at gcc dot gnu dot org 2007-03-12 23:46 ------- This little patch below seems to get around the problem, though I'm not really sure this is sufficient or not. Index: tree-cfg.c =================================================================== --- tree-cfg.c (revision 122871) +++ tree-cfg.c (working copy) @@ -2039,7 +2039,9 @@ find_taken_edge (basic_block bb, tree va return find_taken_edge_switch_expr (bb, val); if (computed_goto_p (stmt)) - return find_taken_edge_computed_goto (bb, TREE_OPERAND( val, 0)); + return (TREE_CODE (val) == LABEL_EXPR) + ? find_taken_edge_computed_goto (bb, TREE_OPERAND(val, 0)) + : NULL; gcc_unreachable (); } @@ -2054,6 +2056,8 @@ find_taken_edge_computed_goto (basic_blo basic_block dest; edge e = NULL; + gcc_assert (TREE_CODE (val) == LABEL_EXPR); + dest = label_to_block (val); if (dest) { -- spark at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |spark at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30984