From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24697 invoked by alias); 29 Sep 2004 22:26:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 24688 invoked from network); 29 Sep 2004 22:26:47 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 29 Sep 2004 22:26:47 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.10) with ESMTP id i8TMQlB2002282 for ; Wed, 29 Sep 2004 18:26:47 -0400 Received: from devserv.devel.redhat.com (devserv.devel.redhat.com [172.16.58.1]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i8TMQlr14020 for ; Wed, 29 Sep 2004 18:26:47 -0400 Received: from devserv.devel.redhat.com (localhost.localdomain [127.0.0.1]) by devserv.devel.redhat.com (8.12.11/8.12.10) with ESMTP id i8TMQXqv004804; Wed, 29 Sep 2004 18:26:33 -0400 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.12.11/8.12.11/Submit) id i8TMQXJE004795; Wed, 29 Sep 2004 18:26:33 -0400 Date: Thu, 30 Sep 2004 01:05:00 -0000 From: Jakub Jelinek To: Diego Novillo Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix PR tree-optimization/17724 Message-ID: <20040929222632.GU31909@devserv.devel.redhat.com> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i X-SW-Source: 2004-09/txt/msg02997.txt.bz2 Hi! This patch seems to fix the testcase (bootstrap/regtest still pending), though I'm not sure if it is the right thing or the dominator should be recomputed somewhere else (either at lower level, e.g. in remove_edge or ssa_remove_edge, or in tree_purge_dead_eh_edges callers, or in cleanup_tree_cfg). 2004-09-30 Jakub Jelinek PR tree-optimization/17724 * tree-cfg.c (tree_purge_dead_eh_edges): Recompute dominator for the EH block. * g++.dg/opt/pr17724-1.C: New test. * g++.dg/opt/pr17724-2.C: New test. --- gcc/tree-cfg.c.jj 2004-09-28 10:19:49.000000000 +0200 +++ gcc/tree-cfg.c 2004-09-30 00:16:27.722706542 +0200 @@ -5067,7 +5067,11 @@ tree_purge_dead_eh_edges (basic_block bb { if (e->flags & EDGE_EH) { + basic_block dest = e->dest, dom; + ssa_remove_edge (e); + dom = recount_dominator (CDI_DOMINATORS, dest); + set_immediate_dominator (CDI_DOMINATORS, dest, dom); changed = true; } else --- gcc/testsuite/g++.dg/opt/pr17724-1.C.jj 2004-09-30 00:20:11.520994862 +0200 +++ gcc/testsuite/g++.dg/opt/pr17724-1.C 2004-09-30 00:20:24.014777890 +0200 @@ -0,0 +1,23 @@ +// PR tree-optimization/17724 +// { dg-do compile } +// { dg-options "-O2" } + +namespace N { char *strcpy (char *, const char *); } +extern "C" char *strcpy (char *, const char *) throw (); +inline char *N::strcpy (char *s, const char *t) { return ::strcpy (s, t); } + +struct S { ~S (); }; +int foo (); + +int +main () +{ + S s; + int a; + char b[64]; + N::strcpy (b, "ABCDEFGHIJKLM"); + while ((a = foo ()) != -1) + if (a) + return -1; + return 0; +} --- gcc/testsuite/g++.dg/opt/pr17724-2.C.jj 2004-09-30 00:20:11.000000000 +0200 +++ gcc/testsuite/g++.dg/opt/pr17724-2.C 2004-09-30 00:20:04.000000000 +0200 @@ -0,0 +1,23 @@ +// PR tree-optimization/17724 +// { dg-do compile } +// { dg-options "-O2" } + +namespace N { char *strcpy (char *, const char *); } +extern "C" char *strcpy (char *, const char *); +inline char *N::strcpy (char *s, const char *t) { return ::strcpy (s, t); } + +struct S { ~S (); }; +int foo (); + +int +main () +{ + S s; + int a; + char b[64]; + N::strcpy (b, "ABCDEFGHIJKLM"); + while ((a = foo ()) != -1) + if (a) + return -1; + return 0; +} Jakub