From patchwork Thu Oct 4 21:24:11 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Koning X-Patchwork-Id: 189333 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 5B7B82C03E9 for ; Fri, 5 Oct 2012 07:24:41 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1349990682; h=Comment: DomainKey-Signature:Received:Received:Received:From:To:CC: Subject:Date:Message-ID:References:In-Reply-To:Content-Type: Content-ID:Content-Transfer-Encoding:MIME-Version:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=6Rq4oxvfvAKv60EwL6SyO+KWtyA=; b=uW7G0Zjyk80avWDYxNnTpdzoC0maOrl4tI0+l4Ro/SayfIdUMuw0HrTKgOJIN9 SD30bb6k1sIB0ZyeOgklNLOMKLUwk1pTxjXVx0rt9piX7MZ+KjXAP4dSiC2JjwgP VVuAPTCvGdxLTN0vwm3DzI4GlxWeW5C5lo9hKWCLaJnYU= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:X-Loopcount0:From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:Content-Type:Content-ID:Content-Transfer-Encoding:MIME-Version:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=Qz1kqrmyhjPzl/sC62QjGPiSe7XEbmUxQgsCmAED86spUUcn0U5+bvP1z5jQ80 m8u8E+sou12MIJAkPgozVlEmiM9ywBeas3OnONgU1gSVZ7IAckyu5y7KpuCb/3LC KQxTA4iVscxvTYz6BnPMP0yeuoWyvGj8YUHWcZDB9+X4M=; Received: (qmail 31013 invoked by alias); 4 Oct 2012 21:24:37 -0000 Received: (qmail 30847 invoked by uid 22791); 4 Oct 2012 21:24:34 -0000 X-SWARE-Spam-Status: No, hits=-6.1 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_SPAMHAUS_DROP, KHOP_THREADED, RCVD_IN_DNSWL_HI, RCVD_IN_HOSTKARMA_W, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from ausxippc101.us.dell.com (HELO ausxippc101.us.dell.com) (143.166.85.207) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 04 Oct 2012 21:24:26 +0000 X-Loopcount0: from 10.170.28.39 From: To: CC: , , Subject: Re: PING^2: [patch] pr/54508: fix incomplete debug information for class Date: Thu, 4 Oct 2012 21:24:11 +0000 Message-ID: References: <20121004185835.GF1787@tucnak.redhat.com> In-Reply-To: <20121004185835.GF1787@tucnak.redhat.com> Content-ID: <990492DA64029347BFB09F575283827E@dell.com> MIME-Version: 1.0 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 Updated patch: there were two existing testcases that needed to be adjusted because of this fix. Ran check RUNTESTFLAGS=dwarf2.exp, no regressions. paul ChangeLog: 2012-10-04 Paul Koning * dwarf2out.c (prune_unused_types_mark): Mark all of parent's children if parent is a class. testsuite/ChangeLog: 2012-10-04 Paul Koning * g++.dg/debug/dwarf2/pr54508.C: New. * g++.dg/debug/dwarf2/localclass1.C: Expect staticfn1, staticfn2, method1 in debug output. * g++.dg/debug/dwarf2/localclass2.C: Likewise. Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 192048) +++ gcc/dwarf2out.c (working copy) @@ -21035,9 +21035,11 @@ prune_unused_types_mark_generic_parms_dies (die); /* We also have to mark its parents as used. - (But we don't want to mark our parents' kids due to this.) */ + (But we don't want to mark our parent's kids due to this, + unless it is a class.) */ if (die->die_parent) - prune_unused_types_mark (die->die_parent, 0); + prune_unused_types_mark (die->die_parent, + class_scope_p (die->die_parent)); /* Mark any referenced nodes. */ prune_unused_types_walk_attribs (die); Index: gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C =================================================================== --- gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C (revision 0) +++ gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C (revision 0) @@ -0,0 +1,67 @@ +// PR debug/54508 +// { dg-do compile } +// { dg-options "-g2 -dA -fno-merge-debug-strings" } + +// { dg-final { scan-assembler "\"cbase\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler "\"OPCODE\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler "\"bi\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler "\"si\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler "\"f1\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler "\"f2\\\\0\"\[ \t\]+\[#;/!|@\]+ DW_AT_name" } } +// { dg-final { scan-assembler-not "\"nc\\\\0\"\[ \t\]+\# DW_AT_name" } } + +class cbase + +{ +public: + static int si; + int bi; +}; + +class c : public cbase + +{ +public: + enum + { + OPCODE = 251 + }; + int i ; + static const char *testc (void) { return "foo"; } +}; + +struct s +{ + int f1; + static const char *tests (void) { return "test"; } +}; + +union u +{ + int f2; + double d; + static const char *testu (void) { return "test union"; } +}; + +namespace n +{ + const char *ntest (void) { return "test n"; } + + class nc + { + public: + int i; + static int sj; + }; +} + +extern void send (int, int, const void *, int); + +void test (int src) +{ + int cookie = 1; + send(src, c::OPCODE, c::testc (), cookie); + send(src, c::OPCODE, s::tests (), cookie); + send(src, c::OPCODE, u::testu (), cookie); + send(src, c::OPCODE, n::ntest (), cookie); +} Index: gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C =================================================================== --- gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C (revision 192048) +++ gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C (working copy) @@ -59,11 +59,11 @@ // { dg-final { scan-assembler "foo\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "staticfn1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "staticfn2\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "staticfn3\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "staticfn4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn4\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler-not "staticfn5\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler-not "staticfn6\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "method1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "method1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg2\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg3\[^\n\r\]*DW_AT_name" } } Index: gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C =================================================================== --- gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C (revision 192048) +++ gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C (working copy) @@ -59,11 +59,11 @@ // { dg-final { scan-assembler "foo\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "staticfn1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "staticfn2\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "staticfn3\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "staticfn4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn4\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler-not "staticfn5\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler-not "staticfn6\[^\n\r\]*DW_AT_name" } } -// { dg-final { scan-assembler-not "method1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "method1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg1\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg2\[^\n\r\]*DW_AT_name" } } // { dg-final { scan-assembler "arg3\[^\n\r\]*DW_AT_name" } }