From patchwork Wed Aug 18 13:29:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Froyd X-Patchwork-Id: 62039 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 9D5E6B70AF for ; Wed, 18 Aug 2010 23:30:11 +1000 (EST) Received: (qmail 12355 invoked by alias); 18 Aug 2010 13:30:09 -0000 Received: (qmail 12342 invoked by uid 22791); 18 Aug 2010 13:30:07 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL, BAYES_00, TW_CX, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 18 Aug 2010 13:30:03 +0000 Received: (qmail 15061 invoked from network); 18 Aug 2010 13:30:00 -0000 Received: from unknown (HELO localhost) (froydnj@127.0.0.2) by mail.codesourcery.com with ESMTPA; 18 Aug 2010 13:30:00 -0000 Date: Wed, 18 Aug 2010 06:29:59 -0700 From: Nathan Froyd To: gcc-patches@gcc.gnu.org Subject: [PATCH] fix PR45049, DECL_CHAIN error Message-ID: <20100818132959.GP25394@codesourcery.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.17+20080114 (2008-01-14) 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 The patch below fixes PR45049 by changing offending DECL_CHAINs back to TREE_CHAINs. Tested on x86_64-unknown-linux-gnu. OK to commit? -Nathan gcc/cp/ PR c++/45049 * name-lookup.c (push_overloaded_decl): Change DECL_CHAIN to TREE_CHAIN. gcc/testsuite/ PR c++/45049 * g++.dg/pr45049-1.C: New test. * g++.dg/pr45049-2.C: New test. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 01f29e4..800e340 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -2157,7 +2157,7 @@ push_overloaded_decl (tree decl, int flags, bool is_friend) for (d = &IDENTIFIER_BINDING (name)->scope->names; *d; - d = &DECL_CHAIN (*d)) + d = &TREE_CHAIN (*d)) if (*d == old || (TREE_CODE (*d) == TREE_LIST && TREE_VALUE (*d) == old)) @@ -2168,7 +2168,7 @@ push_overloaded_decl (tree decl, int flags, bool is_friend) else /* Build a TREE_LIST to wrap the OVERLOAD. */ *d = tree_cons (NULL_TREE, new_binding, - DECL_CHAIN (*d)); + TREE_CHAIN (*d)); /* And update the cxx_binding node. */ IDENTIFIER_BINDING (name)->value = new_binding; diff --git a/gcc/testsuite/g++.dg/pr45049-1.C b/gcc/testsuite/g++.dg/pr45049-1.C new file mode 100644 index 0000000..7863a6b --- /dev/null +++ b/gcc/testsuite/g++.dg/pr45049-1.C @@ -0,0 +1,15 @@ +namespace n1 { + void modf (); +} + +namespace n2 { + void trunc (); + void modf (); +} + +void max () +{ + using n1::modf; + using n2::trunc; + using n2::modf; +} diff --git a/gcc/testsuite/g++.dg/pr45049-2.C b/gcc/testsuite/g++.dg/pr45049-2.C new file mode 100644 index 0000000..ea1f6d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr45049-2.C @@ -0,0 +1,7 @@ +void foo() +{ + void bar(int); + void baz(int); + void baz(void); + void bar(void); +}