From patchwork Mon Jul 25 03:07:24 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 106602 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 07493B6F85 for ; Mon, 25 Jul 2011 13:08:00 +1000 (EST) Received: (qmail 2763 invoked by alias); 25 Jul 2011 03:07:58 -0000 Received: (qmail 2753 invoked by uid 22791); 25 Jul 2011 03:07:57 -0000 X-SWARE-Spam-Status: No, hits=-6.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 25 Jul 2011 03:07:25 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p6P37OA0022554 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 24 Jul 2011 23:07:25 -0400 Received: from pebble.twiddle.home (vpn-226-63.phx2.redhat.com [10.3.226.63]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p6P37OZ5024048 for ; Sun, 24 Jul 2011 23:07:24 -0400 Message-ID: <4E2CDDEC.3010001@redhat.com> Date: Sun, 24 Jul 2011 20:07:24 -0700 From: Richard Henderson User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110621 Fedora/3.1.11-1.fc14 Thunderbird/3.1.11 MIME-Version: 1.0 To: GCC Patches Subject: Fix debug/49825 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Tested on i686-linux. I'm not sure how I missed this with {,-m32} testing on x86_64. r~ PR debug/49825 * dwarf2cfi.c (cfi_row_equal_p): Don't compare args_size. diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c index 3ff4c61..f715e07 100644 --- a/gcc/dwarf2cfi.c +++ b/gcc/dwarf2cfi.c @@ -667,8 +667,15 @@ cfi_row_equal_p (dw_cfi_row *a, dw_cfi_row *b) else if (!cfa_equal_p (&a->cfa, &b->cfa)) return false; - if (a->args_size != b->args_size) - return false; + /* Logic suggests that we compare args_size here. However, if + EXIT_IGNORE_STACK we don't bother tracking the args_size after + the last time it really matters within the function. This does + in fact lead to paths with differing arg_size, but in cases for + which it doesn't matter. */ + /* ??? If we really want to sanity check the output of the optimizers, + find a way to backtrack from epilogues to the last EH site. This + would allow us to distinguish regions with garbage args_size and + regions where paths ought to agree. */ n_a = VEC_length (dw_cfi_ref, a->reg_save); n_b = VEC_length (dw_cfi_ref, b->reg_save);