From: Dodji Seketeli Date: Thu, 18 Aug 2011 06:44:22 +0000 (+0000) Subject: PR c++/45625 - Template parm name doesn't hide outer class scope's member name X-Git-Tag: releases/gcc-4.7.0~4416 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=55715096b51c2cb7e9a9cd03bd562301b7867051;p=thirdparty%2Fgcc.git PR c++/45625 - Template parm name doesn't hide outer class scope's member name gcc/cp/ * pt.c (parameter_of_template_p): Handle comparison with DECLs of template parameters as created by process_template_parm. gcc/testsuite/ * g++.dg/lookup/hidden-var1.C: New test case. From-SVN: r177846 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4d6c353a178c..f95040f86a10 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-08-18 Dodji Seketeli + + PR c++/45625 + * pt.c (parameter_of_template_p): Handle comparison with DECLs of + template parameters as created by process_template_parm. + 2011-08-16 Jason Merrill PR c++/50086 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9ab110aa225d..ed4fe726c205 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -7890,8 +7890,13 @@ parameter_of_template_p (tree parm, tree templ) parms = INNERMOST_TEMPLATE_PARMS (parms); for (i = 0; i < TREE_VEC_LENGTH (parms); ++i) - if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i))) - return true; + { + tree p = TREE_VALUE (TREE_VEC_ELT (parms, i)); + if (parm == p + || (DECL_INITIAL (parm) + && DECL_INITIAL (parm) == DECL_INITIAL (p))) + return true; + } return false; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9440066fc1b9..1bcb0313e4c8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-08-18 Dodji Seketeli + + PR c++/45625 + * g++.dg/lookup/hidden-var1.C: New test case. + 2011-08-17 Tobias Burnus PR fortran/31461 diff --git a/gcc/testsuite/g++.dg/lookup/hidden-var1.C b/gcc/testsuite/g++.dg/lookup/hidden-var1.C new file mode 100644 index 000000000000..6be32b581b21 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/hidden-var1.C @@ -0,0 +1,19 @@ +// Origin PR c++/45625 +// { dg-do compile } + +struct Outer +{ + static const int value = 1 ; + + template< int value > + struct Inner + { + static const int* + get_value() + { + return &value ;// { dg-error "lvalue required" } + } + }; +}; + +template class Outer::Inner<2>;