From 253cc498054d02f859162e04e753e185713a1c5d Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 17 Feb 2010 22:51:43 +0000 Subject: [PATCH] PR c++/43069 * name-lookup.c (set_decl_namespace): Don't copy DECL_CONTEXT if the decl we looked up doesn't match. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156841 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/name-lookup.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/parse/namespace11.C | 7 +++++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/parse/namespace11.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ab5fbe5c196..ef12985789a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-02-17 Jason Merrill + PR c++/43069 + * name-lookup.c (set_decl_namespace): Don't copy DECL_CONTEXT if the + decl we looked up doesn't match. + PR c++/43093 * cp-gimplify.c (cp_gimplify_expr) [INIT_EXPR]: Return if we don't have an INIT_EXPR anymore. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 1f595c0eb92..7b43d30f47e 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3102,7 +3102,8 @@ set_decl_namespace (tree decl, tree scope, bool friendp) if (!is_overloaded_fn (decl)) { /* We might have found OLD in an inline namespace inside SCOPE. */ - DECL_CONTEXT (decl) = DECL_CONTEXT (old); + if (TREE_CODE (decl) == TREE_CODE (old)) + DECL_CONTEXT (decl) = DECL_CONTEXT (old); /* Don't compare non-function decls with decls_match here, since it can't check for the correct constness at this point. pushdecl will find those errors later. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 34729bce210..d2b7655951d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-02-17 Jason Merrill + PR c++/43069 + * g++.dg/parse/namespace11.C: New. + PR c++/43093 * g++.dg/ext/attrib37.C: New. diff --git a/gcc/testsuite/g++.dg/parse/namespace11.C b/gcc/testsuite/g++.dg/parse/namespace11.C new file mode 100644 index 00000000000..7fa73b6e3f9 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/namespace11.C @@ -0,0 +1,7 @@ +// PR c++/43069 + +namespace std { + template < typename > + void swap (); +} +template std::swap // { dg-error "" } -- 2.11.0