From: Jason Merrill Date: Wed, 17 Feb 2010 22:51:43 +0000 (-0500) Subject: re PR c++/43069 (ICE: tree check: expected tree that contains 'decl minimal' structur... X-Git-Tag: releases/gcc-4.5.0~735 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=77278f4acb960227639ab6ad6ded471f82503f51;p=thirdparty%2Fgcc.git re PR c++/43069 (ICE: tree check: expected tree that contains 'decl minimal' structure, have 'overload' in set_decl_namespace, at cp/name-lookup.c:3105) PR c++/43069 * name-lookup.c (set_decl_namespace): Don't copy DECL_CONTEXT if the decl we looked up doesn't match. From-SVN: r156841 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ab5fbe5c196e..ef12985789a9 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 1f595c0eb92b..7b43d30f47e8 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 34729bce210b..d2b7655951d1 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 000000000000..7fa73b6e3f97 --- /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 "" }