From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9504 invoked by alias); 4 Apr 2012 01:01:37 -0000 Received: (qmail 9496 invoked by uid 22791); 4 Apr 2012 01:01:36 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,NO_DNS_FOR_FROM,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 04 Apr 2012 01:01:24 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 03 Apr 2012 18:01:23 -0700 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([10.3.194.135]) by fmsmga002.fm.intel.com with ESMTP; 03 Apr 2012 18:01:23 -0700 Received: by gnu-6.sc.intel.com (Postfix, from userid 500) id 9E1EAC20CF; Tue, 3 Apr 2012 18:01:23 -0700 (PDT) Date: Wed, 04 Apr 2012 01:01:00 -0000 From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com Subject: PATCH: PR debug/52857: DW_OP_GNU_regval_type is generated with INVALID_REGNUM Message-ID: <20120404010123.GA25327@intel.com> Reply-To: "H.J. Lu" MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-04/txt/msg00146.txt.bz2 Hi, As the testcase in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52857 shows, for (subreg:SI (plus:DI (reg/f:DI 16 argp) (const_int -128 [0xffffffffffffff80])) 0) we generates DW_OP_GNU_regval_type with INVALID_REGNUM. This patch checks dbx_reg_number for INVALID_REGNUM before using it. OK for trunk and 4.7? Thanks. H.J. --- 2012-04-03 H.J. Lu PR debug/52857 * dwarf2out.c (mem_loc_descriptor): Don't generate DW_OP_GNU_regval_type with INVALID_REGNUM. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ca88fc5..935c86f 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -11664,7 +11664,8 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, if (dwarf_strict) break; - if (REGNO (rtl) > FIRST_PSEUDO_REGISTER) + if (REGNO (rtl) > FIRST_PSEUDO_REGISTER + || dbx_reg_number (rtl) == INVALID_REGNUM) break; type_die = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);